繁体   English   中英

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

[英]How do I retry reading a locked database with C#?

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

当一个应用程序正在编写时,如果其他应用程序恰好想要读取某些内容,则会收到“数据库锁定”异常。

一切正常,并且符合预期,但是我该如何重试读取? while (exception) try again可能是一个幼稚而令人讨厌的解决方案。

我在想我只是缺少一些System.Core.Sqlite选项来进行重试。 Google给我一些解决方案,涉及复制和删除数据库或终止进程。 但我认为这些是完全无关的。

设置繁忙超时后, SQLite自动重试。

如果可能,您可能需要使用预写日志记录(WAL)进行调查。

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

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

如果蛮力行不通,则说明您使用的不够:-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM