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;