如何使用C#重试读取锁定的数据库?

时间:2014-07-03 05:23:08

标签: c# sqlite

我有几个C#应用程序都使用相同的SQLite数据库(包含一些用户信息)。只有其中一个人必须写信给他们,但他们现在都必须阅读。

当一个应用程序正在编写时,如果其他应用程序碰巧想要读取某些东西,我会得到数据库锁定异常。

很好,所有,并且如预期的那样,但我如何绕过读取的重试? while (exception) try again可能是一个天真而令人讨厌的解决方案..

我认为我只缺少一些关于重试的System.Core.Sqlite选项。 谷歌给了我一些解决方案,涉及复制和删除数据库或查杀进程;但我认为那些......非常无关紧要。

2 个答案:

答案 0 :(得分:0)

当您设置busy timeout时,SQLite会自动重试。

答案 1 :(得分:0)

如果可能,您可能需要使用Write-Ahead Logging (WAL)进行调查。

使用WAL模式,作者和读者不会互相阻挡。但是,仍然只允许一个编写器,但这不是问题,因为您只使用单个应用程序写入数据库。

另外,您可以捕获System.Data.SQLite.SQLiteException并重复查询直到它起作用: - )

如果蛮力不起作用,你就不够用了: - )