我正在开发一个使用SQLite的多线程C#程序。有时运行SQLiteCommand.ExecuteNonQuery() 更新一些行时会出现“SQLite错误(5):数据库已锁定”的问题。我知道这是因为在插入或更新时数据库被锁定,因此如果另一个修改数据库的查询出现,第二个查询将出现此“数据库已锁定”错误。因此,我正在尝试实现解决方法,但我不确定应该如何做。
我试图使程序在抛出数据库锁定错误时等待一段时间并重试,直到成功。但是某种原因没有捕获异常,代码仍然退出try-catch块,尽管在调试输出中仍然打印了数据库锁定消息。我不确定SQL查询是被拒绝还是被接受。
我还尝试使用TransactionScope,自那时以来就没有出现过“数据库已锁定”的问题,但由于问题的随机性,我无法百分之百确定TransactionScope实际上解决了问题,或者只在某种程度上解决了问题,或者根本没有解决问题,而我只是幸运到目前为止。
我试图使程序在抛出数据库锁定错误时等待一段时间并重试,直到成功。但是某种原因没有捕获异常,代码仍然退出try-catch块,尽管在调试输出中仍然打印了数据库锁定消息。我不确定SQL查询是被拒绝还是被接受。
我还尝试使用TransactionScope,自那时以来就没有出现过“数据库已锁定”的问题,但由于问题的随机性,我无法百分之百确定TransactionScope实际上解决了问题,或者只在某种程度上解决了问题,或者根本没有解决问题,而我只是幸运到目前为止。
SQLiteConnection connection = new SQLiteConnection("Data Source=DB.db;Version=3;");
connection.Open();
SQLiteCommand command = connection.CreateCommand();
command.commandText = inputQuery;
try
{
command.executeNonQuery();
}
catch (SQLiteException sqle)
{
Debug.WriteLine("Database error: " + e.Message);
return false;
}
catch (Exception e)
{
Debug.WriteLine("Database error: " + e.Message);
return false;
}
finally
{
connection.Close();
}
我真的希望有人能帮助我找出以下两点中的一种解决方法:1)如何消除数据库被锁定的问题,或者2)如何检测到数据库被锁定的错误。提前感谢您的帮助。