Condividi tramite


Errori del database

SqliteException viene generato quando si rileva un errore di SQLite. Il messaggio viene fornito da SQLite. Le proprietà SqliteErrorCode e SqliteExtendedErrorCode contengono il codice di risultato SQLite dell'errore.

È possibile che si verifichino degli errori ogni volta che Microsoft.Data.Sqlite interagisce con la libreria SQLite nativa. L'elenco seguente illustra gli scenari comuni in cui possono verificarsi errori:

  • Apertura di una connessione.
  • Inizio di una transazione.
  • Esecuzione di un comando.
  • Tramite chiamata a NextResult.

Valutare attentamente il modo in cui l'app gestirà questi errori.

Blocco, nuovi tentativi e timeout

SQLite è aggressivo quando si tratta di bloccare tabelle e file di database. Se l'app abilita un accesso simultaneo al database, è probabile che si verifichino errori di tipo busy e locked. È possibile attenuare molti errori tramite la registrazione write-ahead.

Ogni volta che Microsoft.Data.Sqlite incontra un errore di tipo busy o locked, verrà eseguito automaticamente un nuovo tentativo fino a quando non avrà esito positivo o non verrà raggiunto il timeout del comando.

È possibile aumentare il timeout di un comando impostando CommandTimeout. Il timeout predefinito è di 30 secondi. Un valore di 0 indica che non è previsto alcun timeout.

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

Talvolta, è necessario che Microsoft.Data.Sqlite crei un oggetto comando implicito. Ad esempio, durante BeginTransaction. Per impostare il timeout per questi comandi, usare DefaultTimeout.

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

Vedi anche