2011-05-04 6 views
1

Je développe une application C# avec un backend sqlite db. Dans mon application, des concepts mutithread sont utilisés. Tous les threads appellera le code ci-dessous. alors il jettera l'erreur pendant que la base de données est verrouillée.erreur de verrouillage de la base de données sqlite

lock (localLockHandle) 
     { 

      SQLiteCommand cmd = conn.CreateCommand(); 
      cmd.CommandText = sqlExpr; 
      int ireturn = cmd.ExecuteNonQuery(); 
      return ireturn; 
     } 

Y at-il un moyen de se débarrasser de cette erreur de verrouillage de base de données. J'ouvre et ferme la connexion après chaque processus. même parfois, il jette cette erreur de verrouillage. S'il vous plaît donnez-moi une solution car c'est très critique pour moi.

Merci

+0

Je crois qu'appliquer une serrure à ce point ne fera vraiment rien. À mon avis, à un moment donné, vous faites une requête qui verrouille la base de données. C'est la requête elle-même, et non la commande SQLLiteCommand. Essayez de découvrir quelle est la dernière requête que vous exécutez avant que la base de données ne soit verrouillée. – Ricardo

Répondre

1

Si je comprends bien votre extrait de code, vous utilisez lock sur un objet dans le cadre local. Cela signifierait que d'autres threads lock sur un objet différent.

Essayez de définir un verrou global, comme celui-ci:

static readonly object DatabaseLock = new object()

puis en utilisant lock(DatabaseLock) où vous accédez à la base de données.

Questions connexes