Udostępnij za pośrednictwem


Błędy bazy danych

SqliteException jest zgłaszany po napotkaniu błędu SQLite. Komunikat jest dostarczany przez SQLite. Właściwości SqliteErrorCode i SqliteExtendedErrorCode zawierają kod wyniku SQLite błędu.

Błędy mogą wystąpić w dowolnym momencie, gdy witryna Microsoft.Data.Sqlite współdziała z natywną biblioteką SQLite. Na poniższej liście przedstawiono typowe scenariusze, w których mogą wystąpić błędy:

  • Otwieranie połączenia.
  • Rozpoczynanie transakcji.
  • Wykonywanie polecenia.
  • Wywoływanie metody NextResult.

Zastanów się dokładnie, jak aplikacja będzie obsługiwać te błędy.

Blokowanie, ponawianie prób i przekroczenia limitu czasu

SqLite jest agresywny, jeśli chodzi o blokowanie tabel i plików bazy danych. Jeśli aplikacja włączy dowolny równoczesny dostęp do bazy danych, prawdopodobnie wystąpią błędy zajęte i zablokowane. Wiele błędów można ograniczyć przy użyciu rejestrowania z wyprzedzeniem zapisu.

Za każdym razem, gdy microsoft.Data.Sqlite napotka błąd zajęty lub zablokowany, automatycznie ponowi próbę, dopóki nie zostanie osiągnięty limit czasu polecenia lub zostanie osiągnięty limit czasu polecenia.

Limit czasu polecenia można zwiększyć, ustawiając wartość CommandTimeout. Domyślny limit czasu to 30 sekund. Wartość oznacza brak limitu 0 czasu.

// Retry for 60 seconds while locked
command.CommandTimeout = 60;

Microsoft.Data.Sqlite czasami musi utworzyć niejawny obiekt polecenia. Na przykład podczas beginTransaction. Aby ustawić limit czasu dla tych poleceń, użyj polecenia DefaultTimeout.

// Set the default timeout of all commands on this connection
connection.DefaultTimeout = 60;

Zobacz też