SQLite - ¿cómo puedo manejar potencial de la discordia entre dos hilos separados con el acceso a la base de datos misma?
-
21-09-2019 - |
Pregunta
PREGUNTA: ¿Cómo puedo manejar potencial de la discordia entre dos hilos separados para acceder a la misma base de datos SQLite
Antecedentes: Tengo una aplicación C # Winforms que utiliza SQLite a través de ADO.net. Tengo un hilo BackgroundWorker en la aplicación de Windows Forms. Me he dado cuenta de que puedo conseguir una excepción cuando tanto el hilo principal, y el subproceso de trabajo de fondo, intentan actualizar la base de datos SQLite, es decir, llamar a un DBDataAdaptor.Update () ..
Así que estoy interesado en lo que comprueba mi código (aunque código hilo principal y / o el código que se ejecuta en BackgroundWorker) para manejar esto con gracia, ya sea a través de una forma de comprobar de antemano o de bloqueo hasta que aparezca OK, o elevar un error específico Soy capaz de captar ...
gracias
Solución
En SQLite puede configurar una devolución de llamada que se activa cuando se encuentra con un error de SQLITE_BUSY
o SQLITE_IOERR_BLOCKED
(ver http://www.sqlite.org/c3ref/busy_handler.html ).
Como la mayoría de las veces lo que se quiere hacer es dormir y vuelva a intentar la consulta en caso de ocupado, SQLite se ha construido en devolución de llamada que hace exactamente eso; leer sobre sqlite3_busy_timeout
en http://www.sqlite.org/c3ref/busy_timeout.html.