Errores de base de datos
SqliteException se inicia cuando se encuentra un error de SQLite. El mensaje lo proporciona SQLite. Las propiedades SqliteErrorCode
y SqliteExtendedErrorCode
contienen el código de resultado SQLite del error.
Es posible que se produzcan errores cada vez que Microsoft.Data.SQLite interactúe con la biblioteca nativa de SQLite. En la lista siguiente se muestran los escenarios comunes en los que se pueden producir errores:
- Apertura de una conexión.
- Inicio de una transacción.
- Ejecutar un comando.
- Llamada a NextResult.
Considere detenidamente cómo controlará la aplicación estos errores.
Bloqueo, reintentos y tiempos de expiración
SQLite es agresivo en lo que respecta al bloqueo de tablas y archivos de base de datos. Si la aplicación habilita el acceso simultáneo a bases de datos, es probable que se produzcan errores de estado ocupado y bloqueado. Puede mitigar muchos errores mediante el registro de escritura anticipada.
Siempre que Microsoft.Data.SQLite encuentra un error de estado ocupado o bloqueado, realizará reintentos automáticos hasta que se ejecute correctamente o se alcance el tiempo de expiración del comando.
Puede aumentar el tiempo de expiración de un comando si establece CommandTimeout. El tiempo de expiración predeterminado es de 30 segundos. Un valor de 0
significa que no hay tiempo de expiración.
// Retry for 60 seconds while locked
command.CommandTimeout = 60;
En ocasiones, Microsoft.Data.SQLitetiene que crear un objeto de comando implícito. Por ejemplo, durante BeginTransaction. Para establecer el tiempo de expiración para estos comandos, use DefaultTimeout.
// Set the default timeout of all commands on this connection
connection.DefaultTimeout = 60;