sqlite - come posso gestire il potenziale conflitto tra due thread separati che accedono allo stesso database?

StackOverflow https://stackoverflow.com/questions/2490432

  •  21-09-2019
  •  | 
  •  

Domanda

DOMANDA: Come posso gestire il potenziale conflitto tra due thread separati l'accesso alla stessa database SQLite

BACKGROUND: Ho un'applicazione C # WinForms che usa SQLite via ADO.net. Ho un filo BackgroundWorker nell'applicazione WinForms. Ho notato che posso ottenere un'eccezione quando sia il thread principale, e lo sfondo thread di lavoro, cercano di aggiornare il database SQLite, cioè chiamando un DBDataAdaptor.Update () ..

Quindi sono interessato a quello che controlla il mio codice (anche se il codice thread principale e / o il codice che viene eseguito in BackgroundWorker) per gestire questa grazia, sia tramite un modo per controllare in anticipo, o il blocco fino a quando OK, o alzando un errore specifico riesco ad afferrare ...

grazie

È stato utile?

Soluzione

In SQLite è possibile configurare un callback che si attiva quando si verifica un errore di SQLITE_BUSY o SQLITE_IOERR_BLOCKED (vedi http://www.sqlite.org/c3ref/busy_handler.html ).

Come la maggior parte del tempo ciò che ci si vuole fare è dormire e riprovare la query su occupato, SQLite è dotato di un callback che fa esattamente questo; leggere su sqlite3_busy_timeout a http://www.sqlite.org/c3ref/busy_timeout.html.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top