我如何重试读取锁定的数据库与c#

本文关键字:锁定 数据库 读取 何重试 重试 | 更新日期: 2023-09-27 18:11:18

我有几个c#应用程序都使用相同的SQLite数据库(包含一些用户信息)。只有一个人需要写,但所有的人都必须不时地读。

当一个应用程序正在写入时,如果其他应用程序碰巧想要读取某些内容,我会得到Database Locked异常。

很好,正如预期的那样,但是我如何绕过重试读取?while (exception) try again可能是一个幼稚和肮脏的解决方案。

我在想,我错过的重试只是一些System.Core.Sqlite选项。谷歌给了我一些解决方案,包括复制和删除数据库或终止进程;但是我认为这些都很……不相关的。

我如何重试读取锁定的数据库与c#

当您设置了繁忙超时时,SQLite会自动重试。

如果可能的话,您可能想要研究使用预写日志记录(WAL)。

使用WAL模式时,写入器和读取器不会互相阻塞。然而,仍然只允许一个写入器,但这不是一个问题,因为您只使用单个应用程序写入DB。

另外,您可以通过System.Data.SQLite.SQLiteException捕获此异常,并重复查询,直到它工作:-)

如果蛮力不起作用,你没有使用足够:-)