La base de données Sqlite verrouillé

Je suis en utilisant asp.net c# et le téléchargement d'une base de données SqLite à un serveur, puis je fais un peu de l'insertion et de mise à jour. Le problème, c'est que parfois (je pense que c'est quand les choses vont mal avec la mise à jour ou si) de la base de données est verrouillée. Donc, la prochaine fois que j'essaie de télécharger un fichier c'est encore verrouillé et j'obtiens un message d'erreur indiquant que "Le processus ne peut pas accéder au fichier car ce fichier est utilisé par un autre processus". Peut-être que le fichier de base de données n'est pas supprimée si quelque chose se passe mal lors de la transaction? La seule chose pour résoudre ce problème est de redémarrer le serveur.

Comment puis-je régler cela dans mon code, donc je peux être sûr que c'est toujours déverrouillé même si quelque chose va mal?

C'est mon code:

try
{
  string filepath = Server.MapPath("~/files/db.sql");

  //Gets the file and save it on the server
  ((HttpPostedFile)HttpContext.Current.Request.Files["sqlitedb"]).SaveAs(filepath);

  //Open the database
  SQLiteConnection conn = new SQLiteConnection("Data Source=" + filepath + ";Version=3;");

  conn.Open();
  SQLiteCommand cmd = new SQLiteCommand(conn);
  using (SQLiteTransaction transaction = conn.BeginTransaction())
  {
     using (cmd)
     {
        //Here I do some stuff to the database, update, insert etc
     }
     transaction.Commit();
  }
  conn.Close();
  cmd.Dispose();
}
catch (Exception exp)
{
//Error
}
Êtes-vous à l'aide de threads?
Les Threads de quelle manière? Pas dans mon asp.net code, dans le sqlite code je ne suis pas sûr, mais je ne le pense pas?
asp.net est multithread, même lorsque vous n'avez pas explicitement les créer. Sinon, comment peut asp.net traiter les demandes des différents utilisateurs? Lorsque vous modifiez un sqlite db, l'ensemble de la db est verrouillé. Vous pouvez faire multithread lecture avec sqlite, mais une écriture (insert, update, delete, create table) verrouille l'ensemble de la db. Je pense que vous devez utiliser .net readerwriter-verrouillage de la classe.

OriginalL'auteur | 2009-07-22