我有几个C#应用程序都使用相同的SQLite数据库(包含一些用户信息)。只有其中一个人必须写信给他们,但他们现在都必须阅读。
当一个应用程序正在编写时,如果其他应用程序碰巧想要读取某些东西,我会得到数据库锁定异常。
很好,所有,并且如预期的那样,但我如何绕过读取的重试? while (exception) try again
可能是一个天真而令人讨厌的解决方案..
我认为我只缺少一些关于重试的System.Core.Sqlite
选项。
谷歌给了我一些解决方案,涉及复制和删除数据库或查杀进程;但我认为那些......非常无关紧要。
答案 0 :(得分:0)
当您设置busy timeout时,SQLite会自动重试。
答案 1 :(得分:0)
如果可能,您可能需要使用Write-Ahead Logging (WAL)进行调查。
使用WAL模式,作者和读者不会互相阻挡。但是,仍然只允许一个编写器,但这不是问题,因为您只使用单个应用程序写入数据库。
另外,您可以捕获System.Data.SQLite.SQLiteException并重复查询直到它起作用: - )
如果蛮力不起作用,你就不够用了: - )