我有一个项目,其中我想使用一些.NET 4.0功能,但核心要求是我可以使用针对2.X编译的System.Data.SQLite框架.我看到提到这是可能的,例如这里接受的答案,但我不知道如何实际实现这一点.
当我在参考2.X程序集时尝试运行我的4.0项目时,我得到:
混合模式程序集是针对运行时的版本"v2.0.50727"构建的,如果没有其他配置信息,则无法在4.0运行时加载.
什么"附加配置"是必要的?
在C#应用程序代码中,我想创建一个或多个SQLite数据库然后进行交互.
初始化新的SQLite数据库文件并打开它进行读写的首选方法是什么?
在创建数据库之后,如何执行DDL语句来创建表?
在尝试删除文件之前,我在关闭数据库时遇到问题.代码就是这样
myconnection.Close();
File.Delete(filename);
Run Code Online (Sandbox Code Playgroud)
并且Delete抛出了一个异常,即该文件仍在使用中.几分钟后我在调试器中重新尝试了Delete(),所以这不是时间问题.
我有事务代码,但在Close()调用之前它根本不运行.所以我很确定这不是一个开放的交易.打开和关闭之间的sql命令只是选择.
ProcMon显示我的程序和我的防病毒软件查看数据库文件.它没有显示我的程序在close()之后释放db文件.
Visual Studio 2010,C#,System.Data.SQLite版本1.0.77.0,Win7
我看到一个两岁的bug就像这样,但更新日志说它已修复.
还有什么我可以检查的吗?有没有办法获得任何打开的命令或事务的列表?
新的工作代码:
db.Close();
GC.Collect(); // yes, really release the db
bool worked = false;
int tries = 1;
while ((tries < 4) && (!worked))
{
try
{
Thread.Sleep(tries * 100);
File.Delete(filename);
worked = true;
}
catch (IOException e) // delete only throws this on locking
{
tries++;
}
}
if (!worked)
throw new IOException("Unable to close file" + filename);
Run Code Online (Sandbox Code Playgroud) 我最近读到了关于SQLite的内容,并认为我会尝试一下.当我插入一条记录时,它表现良好.但是当我插入一百个它需要五秒钟时,随着记录计数的增加,时间也会增加.可能有什么不对?我正在使用SQLite Wrapper (system.data.SQlite):
dbcon = new SQLiteConnection(connectionString);
dbcon.Open();
//---INSIDE LOOP
SQLiteCommand sqlComm = new SQLiteCommand(sqlQuery, dbcon);
nRowUpdatedCount = sqlComm.ExecuteNonQuery();
//---END LOOP
dbcon.close();
Run Code Online (Sandbox Code Playgroud) 我正在从SQLite获取数据库锁定异常仅用于某些查询.
下面是我的代码:当我执行任何select语句时,它工作正常.
当我在JobsTable 上执行任何写语句时,它也可以正常工作.
这很好用:
ExecuteNonQuery("DELETE FROM Jobs WHERE id=1");
Run Code Online (Sandbox Code Playgroud)
但是,如果我正在执行对Employees表的查询,它会抛出数据库被锁定的异常.
抛出异常:
ExecuteNonQuery("DELETE FROM Employees WHERE id=1");
Run Code Online (Sandbox Code Playgroud)
以下是我的功能:
public bool OpenConnection()
{
if (Con == null)
{
Con = new SQLiteConnection(ConnectionString);
}
if (Con.State == ConnectionState.Closed)
{
Con.Open();
//Cmd = new SQLiteCommand("PRAGMA FOREIGN_KEYS=ON", Con);
//Cmd.ExecuteNonQuery();
//Cmd.Dispose();
//Cmd=null;
return true;
}
if (IsConnectionBusy())
{
Msg.Log(new Exception("Connection busy"));
}
return false;
}
public Boolean CloseConnection()
{
if (Con != null && Con.State …Run Code Online (Sandbox Code Playgroud) 用户定义的函数和整理顺序完全支持用户定义的函数和整理顺序意味着在许多情况下,如果SQLite没有特性,您可以用自己喜欢的.NET语言自己编写.编写UDF和整理序列从未如此简单
我在这里找到的C#SQLite ADO.NET提供程序上发现了这一点,并且在理解有关如何实现/使用用户定义函数的文档时遇到了问题.
任何人都可以解释如何,或为这个失去的新手提供任何工作的例子?
使用NuGet的EF6和SQLite的最新版本.我终于得到app.config文件在Stackoverflow上的一些有用的帖子后工作.现在问题是虽然数据库是,但是没有创建表.
我的app.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<entityFramework>
<providers>
<provider invariantName="System.Data.SQLite"
type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
</providers>
</entityFramework>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SQLite" />
<add name="SQLite Data Provider"
invariant="System.Data.SQLite"
description=".Net Framework Data Provider for SQLite"
type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
<remove invariant="System.Data.SQLite.EF6" />
<add name="SQLite Data Provider (Entity Framework 6)"
invariant="System.Data.SQLite.EF6"
description=".Net Framework Data Provider for SQLite (Entity …Run Code Online (Sandbox Code Playgroud) .net sqlite system.data.sqlite ef-code-first entity-framework-6
我正在查看System.Data.SQLite下载页面,它列出了.NET 4的混合模式程序集和常规(我假设).我将要使用这个库的项目是.NET 4,它将被编译为x86.
我有两个问题:
我在ASP.NET应用程序(框架4.0)中使用System.Data.SQLite提供程序.我遇到的问题是,当我在SQLite数据库的表中插入某些内容时,数据库会被锁定,即使在连接处理后锁也没有被释放.
尝试访问该文件时,错误是:"进程无法访问文件'catalog.sqlite',因为它正由另一个进程使用."
我的代码非常简单,我打开连接,从SQLServer数据库读取一些数据,将数据插入SQLite(通过SQLiteDataAdapter),然后关闭连接并处置所有内容以保证安全.但是,当我在填充数据后尝试压缩文件时,我得到了这个错误.
我已经在StackOverflow上阅读了所有类型的建议,但没有一个能帮助解决问题(关闭防病毒软件,更改事务模型,在压缩文件之前等待几秒钟,将所有插入调用包装到事务中,等等.但没有人帮助解决这个问题.
也许有一些特定于ASP.NET的东西(多线程是问题?即使我在开发机器上测试它,只有一个调用该函数而没有并发?)
作为旁注,我尝试避免使用DataTable和SQLiteDataAdapter,并且直接使用SQLiteCommand,这样就可以实现魅力.当然,我可以继续将查询构建为字符串而不是使用数据适配器,但是当有一个构建框架时,我发现它有点尴尬.
我已将代码分解为尽可能小的语句:
Dim cn As System.Data.SQLite.SQLiteConnection
Run Code Online (Sandbox Code Playgroud)
从WinForm应用程序调用代码时出现以下错误:
System.BadImageFormatException:无法加载文件或程序集'System.Data.SQLite,Version = 1.0.65.0,Culture = neutral,PublicKeyToken = db937bc2d44ff139'或其依赖项之一.尝试加载格式不正确的程序.文件名:'System.Data.SQLite,Version = 1.0.65.0,Culture = neutral,PublicKeyToken = db937bc2d44ff139'
然而从MS单元测试调用相同的代码我没有得到错误,加上完整的代码集按预期工作.