数据库错误

遇到 SQLite 错误时会引发 SqliteException。 消息由 SQLite 提供。 属性SqliteErrorCodeSqliteExtendedErrorCode包含错误的 SQLite 结果代码

每当 Microsoft.Data.Sqlite 与本机 SQLite 库交互时,都可能会遇到错误。 以下列表显示了可能发生错误的常见方案:

  • 打开连接。
  • 启动事务。
  • 执行命令。
  • 调用 NextResult

请仔细考虑你的应用如何处理这些错误。

锁定、重试和超时

警告

尽管 SQLite 支持从多个线程并发访问同一数据库,但 .NET API 对象不是线程安全的。 这意味着 SqliteConnectionSqliteCommandSqliteDataReader 不能从多个线程同时共享和使用。 在从并发应用程序使用 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;

另请参阅