.net 奇怪的SQLite行为-';数据库已锁定';有时,但有时不是

.net 奇怪的SQLite行为-';数据库已锁定';有时,但有时不是,.net,database,sqlite,system.data.sqlite,.net,Database,Sqlite,System.data.sqlite,很长一段时间以来,我一直在使用SQLite(通过.NET的包装器System.Data.SQLite)作为我的应用程序的数据库,一切正常。最近我开始得到一个“数据库被锁定”。My DAL有几个函数,每个函数都读写,并在using块中使用新创建的连接。当我运行测试时,错误发生在第二次调用其中一个函数时。但是,当我调试并移动一行又一行时,一切正常。我的应用程序是单线程的。 有人有主意了吗? 非常感谢。您是同时运行SQLite控制台还是SQLiteAnalytics EXE?似乎很多人都遇到了这个问题

很长一段时间以来,我一直在使用SQLite(通过.NET的包装器
System.Data.SQLite
)作为我的应用程序的数据库,一切正常。最近我开始得到一个“数据库被锁定”。My DAL有几个函数,每个函数都读写,并在
using
块中使用新创建的连接。当我运行测试时,错误发生在第二次调用其中一个函数时。但是,当我调试并移动一行又一行时,一切正常。我的应用程序是单线程的。
有人有主意了吗?

非常感谢。

您是同时运行SQLite控制台还是SQLiteAnalytics EXE?

似乎很多人都遇到了这个问题,无法解决,所以我将编写解决方案。在
System.Data.SQLite
中,从1.0.45.0版开始,关闭连接不会自动关闭任何相关的
DbCommand
DbDataReader
对象。它们必须显式关闭。因此,连接并不是真正关闭的,以允许这些对象工作,而是在所有相关对象被释放后排队关闭。请参阅。
在以前的版本中,它的行为与预期的一样,关闭连接实际上会关闭它

解决方案:完成所有
DbCommand
DbDataReader
后,显式地处理它们,就像处理
DbConnection
本身一样。

no,运行MSTest测试。在.NET中与
System.Data.SQLite
库一起使用它。