Sdílet prostřednictvím


Chyby databáze

SqliteException je vyvolán při výskytu chyby SQLite. Zprávu poskytuje SQLite. Vlastnosti SqliteErrorCode a SqliteExtendedErrorCode obsahují kód výsledku chyby SQLite.

K chybám může dojít kdykoli, když Microsoft.Data.Sqlite komunikuje s nativní knihovnou SQLite. Následující seznam ukazuje běžné scénáře, ve kterých můžou nastat chyby:

  • Otevření připojení
  • Zahájení transakce.
  • Spuštění příkazu
  • Volání NextResult.

Pečlivě zvažte, jak bude aplikace tyto chyby zpracovávat.

Uzamčení, opakování a vypršení časových limitů

Výstraha

I když SQLite podporuje souběžný přístup ke stejné databázi z více vláken, objekty rozhraní .NET API nejsou bezpečné pro přístup z více vláken. To znamená, že SqliteConnection, SqliteCommand a SqliteDataReader nelze sdílet a používat souběžně z více vláken. Při použití Microsoft.Data.Sqlite ze souběžné aplikace jednoduše vytvořte a otevřete novou instanci SqliteConnection pokaždé, když potřebujete získat přístup k databázi (sdružování zajistí, že se jedná o rychlou operaci).

SQLite je agresivní, pokud jde o zamykání tabulek a databázových souborů. Jestliže vaše aplikace umožňuje jakýkoli souběžný přístup k databázi, pravděpodobně narazíte na chyby zaneprázdněnosti a uzamčení. Mnoho chyb můžete zmírnit pomocí protokolování s předstihem při zápisu.

Pokaždé, když Microsoft.Data.Sqlite narazí na zaneprázdněnou nebo uzamčenou chybu, bude se automaticky pokoušet znovu, dokud se to nezdaří nebo nedosáhne časového limitu příkazu.

Časový limit příkazu můžete zvýšit nastavením CommandTimeout. Výchozí časový limit je 30 sekund. Hodnota 0 znamená žádný časový limit.

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

Microsoft.Data.Sqlite někdy potřebuje vytvořit implicitní příkazový objekt. Například během BeginTransaction. K nastavení časového limitu pro tyto příkazy použijte DefaultTimeout.

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

Viz také