C# SQLite错误(10):锁定/共享冲突延迟25毫秒
My工作正常,但偶尔会输出此错误:C# SQLite错误(10):锁定/共享冲突延迟25毫秒,c#,sqlite,locking,conflict,C#,Sqlite,Locking,Conflict,My工作正常,但偶尔会输出此错误: SQLite error (10): delayed 25ms for lock/sharing conflict 正如上所建议的,我更新到了最新的SQLite,但它仍然存在。 如何解决这个问题 SQLite版本:SQLite-netFx40-static-binary-Win32-2010-1.0.84.0.zip32位Windows(.NET Framework 4.0)的预编译静态链接二进制文件 Visual C#2010 Express查看您评论中
SQLite error (10): delayed 25ms for lock/sharing conflict
正如上所建议的,我更新到了最新的SQLite,但它仍然存在。如何解决这个问题
SQLite版本:
SQLite-netFx40-static-binary-Win32-2010-1.0.84.0.zip
32位Windows(.NET Framework 4.0)的预编译静态链接二进制文件
Visual C#2010 Express查看您评论中的源代码:
using (var command = new SQLiteCommand(GetSQLiteConnection()))
{
try
{
command.CommandText =
"DELETE FROM folders WHERE path='" + path + "'";
command.ExecuteNonQuery();
}
catch (SQLiteException e)
{
SparkleLogger.LogInfo("CmisDatabase", e.Message);
}
}
using语句正在处理命令,而不是连接。尝试为每个命令使用两个嵌套的using语句
using (var connection= GetSQLiteConnection())
{
using (var command = new SQLiteCommand(connection))
{
try
{
command.CommandText =
"DELETE FROM folders WHERE path='" + path + "'";
command.ExecuteNonQuery();
}
catch (SQLiteException e)
{
SparkleLogger.LogInfo("CmisDatabase", e.Message);
}
}
}
这可能会缓解问题,但是其他因素可能会导致此错误出现。根据此原始代码:
using (var command = new SQLiteCommand(GetSQLiteConnection()))
{
try
{
command.CommandText =
"DELETE FROM folders WHERE path='" + path + "'";
command.ExecuteNonQuery();
}
catch (SQLiteException e)
{
SparkleLogger.LogInfo("CmisDatabase", e.Message);
}
}
更改为此解决了问题(只有前两行不同):
值得检查的是,您是否将SQLite连接封装在using语句中,以确保它们已被释放。@GavinSinai:我无法确定它发生在何处(因为它似乎是随机发生的),但我只在此类中使用SQLite:更改为该类后,它会说
无法访问已释放的对象。对象名称:SQLiteConnection
我不想每次都重新创建SQLiteConnection连接,因此很遗憾,我不能使用这种想法。我发现,通过确保所有连接、命令和读取器都包含在using语句中,我可以完全消除system.data.sqlite代码中的此类错误。
var connection = GetSQLiteConnection();
using (var command = new SQLiteCommand(connection))
{
try
{
command.CommandText =
"DELETE FROM folders WHERE path='" + path + "'";
command.ExecuteNonQuery();
}
catch (SQLiteException e)
{
SparkleLogger.LogInfo("CmisDatabase", e.Message);
}
}