遇到 SQLite 错误时会引发 SqliteException。 消息由 SQLite 提供。 属性SqliteErrorCodeSqliteExtendedErrorCode包含错误的 SQLite 结果代码。
每当 Microsoft.Data.Sqlite 与本机 SQLite 库交互时,都可能会遇到错误。 以下列表显示了可能发生错误的常见方案:
- 打开连接。
- 启动事务。
- 执行命令。
- 调用 NextResult。
请仔细考虑你的应用如何处理这些错误。
锁定、重试和超时
警告
尽管 SQLite 支持从多个线程并发访问同一数据库,但 .NET API 对象不是线程安全的。 这意味着 SqliteConnection、SqliteCommand 和 SqliteDataReader 不能从多个线程同时共享和使用。
在从并发应用程序使用 Microsoft.Data.Sqlite 时,每当需要访问数据库,只需创建并打开一个新的 SqliteConnection 实例(连接池可确保这是一个快速操作)。
在锁定表和数据库文件时,SQLite 非常积极。 如果应用启用了任何并发数据库访问,则可能会遇到繁忙和锁定错误。 可以使用 预写日志记录来缓解许多错误。
每当 Microsoft.Data.Sqlite 遇到“繁忙”或“锁定”错误时,它都会自动重试,直到成功或达到命令超时限制。
可以通过设置 CommandTimeout来增加命令的超时。 默认超时值为 30 秒。 值 0 意味着无超时。
// Retry for 60 seconds while locked
command.CommandTimeout = 60;
Microsoft.Data.Sqlite 有时需要创建隐式命令对象。 例如,在 BeginTransaction 期间。 若要设置这些命令的超时,请使用 DefaultTimeout。
// Set the default timeout of all commands on this connection
connection.DefaultTimeout = 60;