2012-01-20 21 views
5

il programma su cui sto lavorando ottiene i dati da un servizio Web, aggiunge dati al database, elimina e aggiorna. Ma a volte quando eseguo la mia applicazione tutte le azioni hanno successo, ma a volte quando voglio aggiungere, eliminare o aggiornare i dati ottengo questo errore.Il file di database è bloccato

Il server non è riuscito a elaborare la richiesta. ---> Il file di database è bloccato database è bloccato

Non riesco a capire lo stesso programma a un certo momento funziona bene, ma a un certo momento il programma dà molto questo messaggio.

+0

Quale motore di database stai utilizzando? Hai controllato i registri del database? –

+0

a quale database ti stai connettendo? File .mdb di MS Access o SQL Server? Puoi anche mostrare la stringa di connessione? –

+0

Dovrai fornire maggiori dettagli sul database che stai utilizzando e su come lo stai consultando. –

risposta

5

SqlLite non consente a due thread di utilizzare il database contemporaneamente.

Il modo più semplice per risolverlo è utilizzare l'istruzione lock in tutte le chiamate di database.

+1

ma il problema è che ho 4 database di questo tipo sul mio sito Web tutte le altre app ad essi correlate funzionano bene, ma solo questa app non funziona con il servizio web. Non funziona significa che a volte funziona e a volte la stessa app fornisce l'errore come ho detto. –

+0

Hai provato a caricare test sugli altri siti? Si imbatteranno nel problema prima o poi. Stai forse cercando di utilizzare più connessioni db per la stessa richiesta HTTP nel webservice? – jgauffin

3

Usi un database basato su file come Access?

Il file di database è sempre bloccato (in quasi tutti i sistemi di database), provare a interrompere il servizio di database per sbloccare il file.

+0

Sto utilizzando il file di database sqlite . Come può fare un servizio web questo significa fermare il file da sbloccare? –

4

C'è un pacchetto eccellente chiamato SysInternals. uno dei componenti all'interno è Process Monitor (procmon). Usalo per verificare quale applicazione blocca i file del tuo database e se 2 istanze della tua applicazione stanno "combattendo" sul blocco dei file DB.

In Sqlite più processi possono leggere dai file DB, ma solo uno può apportare modifiche (INSERT/UPDATE/DELETE) in un determinato momento. se più di un processo sta tentando di modificare il DB nello stesso tempo, si otterrà questo errore. puoi usare Mutex per sincronizzare tra i processi che accedono al DB.

BTW, la documentazione sqlite consiglia di evitare l'utilizzo del database da più thread. per assicurarsi che solo un thread acceda al DB contemporaneamente, è possibile creare una classe statica che eseguirà tutte le interazioni con il database e utilizzare le istruzioni di blocco all'interno di questa classe per evitare di accedere al DB da più thread contemporaneamente.

Problemi correlati