Megosztás:


Adatbázishibák

SqliteException dobásra kerül SQLite-hiba esetén. Az üzenetet az SQLite biztosítja. A SqliteErrorCode tulajdonságok tartalmazzák SqliteExtendedErrorCode a hiba SQLite eredménykódját .

Hibák bármikor előfordulhatnak, amikor a Microsoft.Data.Sqlite a natív SQLite-kódtárat használja. Az alábbi lista azokat a gyakori forgatókönyveket mutatja be, ahol hibák léphetnek fel:

  • Kapcsolat megnyitása.
  • Tranzakció elindítása.
  • Parancs végrehajtása.
  • Hívás NextResult.

Alaposan gondolja át, hogy az alkalmazás hogyan fogja kezelni ezeket a hibákat.

Zárolások, újrapróbálkozások és időtúllépések

Figyelmeztetés

Bár az SQLite több szálból is támogatja ugyanahhoz az adatbázishoz való egyidejű hozzáférést, a .NET API-objektumok nem szálbiztosak. Ez azt jelenti, hogy SqliteConnection, SqliteCommand és SqliteDataReader nem oszthatók meg, és nem használhatók egyszerre több szálból. Ha a Microsoft.Data.Sqlite-ot egyidejű alkalmazás esetén használja, egyszerűen hozzon létre és nyisson meg egy új példánytSqliteConnection, amikor hozzáfér az adatbázishoz (a készletezés biztosítja, hogy ez egy gyors művelet).

Az SQLite agresszív a táblák és adatbázisfájlok zárolása során. Ha az alkalmazás engedélyezi az egyidejű adatbázis-hozzáférést, valószínűleg foglalt és zárolt hibákba ütközik. Az előre írt naplózással számos hibát elháríthat.

Amikor a Microsoft.Data.Sqlite foglalt vagy zárolt hibába ütközik, a rendszer automatikusan újrapróbálkozza, amíg sikeres nem lesz, vagy el nem éri a parancs időtúllépését.

A parancs időtúllépését a CommandTimeout beállítással növelheti. Az alapértelmezett időtúllépés 30 másodperc. Az érték 0 azt jelenti, hogy nincs időtúllépés.

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

A Microsoft.Data.Sqlite-nek néha implicit parancsobjektumot kell létrehoznia. Például a BeginTransaction során. A parancsok időtúllépésének beállításához használja a következőt DefaultTimeout: .

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

Lásd még