0

问题:如何处理访问同一个 Sqlite 数据库的两个单独线程之间的潜在争用?

背景:我有一个通过 ADO.net 使用 Sqlite 的 C# Winforms 应用程序。我在 winforms 应用程序中有一个后台工作线程。我注意到当主线程和后台工作线程都尝试更新 sqlite 数据库时,我会得到一个异常,即调用 DBDataAdaptor.Update()..

所以我对检查我的代码(尽管是主线程代​​码和/或在后台工作程序中运行的代码)来优雅地处理这个问题感兴趣,或者通过预先检查的方式,或者阻塞直到 OK,或者引发我可以捕获的特定错误...

谢谢

4

1 回答 1

1

在 sqlite 中,您可以配置在遇到错误时触发的回调(请参阅SQLITE_BUSYhttp://www.sqlite.org/c3ref/busy_handler.html SQLITE_IOERR_BLOCKED

因为大多数时候你想要做的就是睡觉并在忙碌时重试查询,sqlite 有一个内置的回调可以做到这一点;sqlite3_busy_timeouthttp://www.sqlite.org/c3ref/busy_timeout.html阅读。

于 2010-03-22T07:01:49.753 回答