SqliteException 遇到 SQLite 錯誤時會擲回。 此訊息是由 SQLite 所提供。
SqliteErrorCode和 SqliteExtendedErrorCode 屬性包含錯誤的 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;