Datenbankfehler
SqliteException wird ausgelöst, wenn ein SQLite-Fehler auftritt. Die Meldung wird von SQLite bereitgestellt. Die Eigenschaften SqliteErrorCode
und SqliteExtendedErrorCode
enthalten den SQLite-Ergebniscode des Fehlers.
Fehler können immer dann auftreten, wenn Microsoft.Data.Sqlite mit der nativen SQLite-Bibliothek interagiert. In der folgenden Liste sind die Szenarios aufgeführt, in denen üblicherweise Fehler auftreten können:
- Öffnen einer Verbindung
- Beginnen einer Transaktion
- Ausführen eines Befehls
- Aufrufen von NextResult.
Denken Sie sorgfältig darüber nach, wie Ihre App diese Fehler behandeln soll.
Sperrung, erneute Versuche und Timeouts
SQLite ist aggressiv, was das Sperren von Tabellen und Datenbankdateien betrifft. Wenn Ihre App gleichzeitigen Datenbankzugriff ermöglicht, treten wahrscheinlich Fehler aufgrund von starker Auslastung und Sperrung auf. Sie können viele Fehler entschärfen, indem Sie die Write-Ahead-Protokollierung verwenden.
Wenn Microsoft.Data.Sqlite einen Fehler aufgrund von starker Auslastung oder Sperrung feststellt, wird automatisch erneut versucht, den entsprechenden Befehl auszuführen, bis er erfolgreich ausgeführt wurde oder ein Timeout für den Befehl auftritt.
Sie können den Zeitraum für das Timeout von Befehlen verlängern, indem Sie CommandTimeout festlegen. Der Standardzeitraum bis zum Timeout beträgt 30 Sekunden. Der Wert 0
bedeutet, dass kein Timeout auftritt.
// Retry for 60 seconds while locked
command.CommandTimeout = 60;
Manchmal muss Microsoft.Data.Sqlite ein implizites Befehlsobjekt erstellen. Zum Beispiel bei BeginTransaction. Verwenden Sie DefaultTimeout, um den Zeitraum bis zum Timeout für diese Befehle festzulegen.
// Set the default timeout of all commands on this connection
connection.DefaultTimeout = 60;