2012-10-05 116 views
0

我使用C#应用程序和运行在服务器机器service.When我进行将Windows应用程序,更新删除客户机上运行,​​它抛出数据库锁如下错误,SQLite数据库被锁定异常

database is locked 
    at System.Data.SQLite.SQLite3.Step(SQLiteStatement stmt) 
    at System.Data.SQLite.SQLiteDataReader.NextResult() 
    at System.Data.SQLite.SQLiteDataReader..ctor(SQLiteCommand cmd, CommandBehavior behave) 
    at System.Data.SQLite.SQLiteCommand.ExecuteReader(CommandBehavior behavior) 
    at System.Data.SQLite.SQLiteCommand.ExecuteNonQuery() 
    at System.Data.SQLite.SQLiteTransaction.Commit() 

下面是我的代码

public int ExecuteNonQuerySQL(SQLiteCommand cmd) 
    { 
     int ireturn = 0; 
     if (conn.State != ConnectionState.Open) 
       Open(DataFile); 
      using (SQLiteTransaction dbtrans = conn.BeginTransaction(IsolationLevel.ReadCommitted)) 
      { 
        using (cmd.Connection=conn) 
        { 
         cmd.CommandText =cmd.CommandText ; 
          cmd.Transaction = dbtrans; 
          ireturn = cmd.ExecuteNonQuery(); 
          dbtrans.Commit(); 
          cmd.Dispose(); 
         } 
        } 
       } 

请帮我在这,我已经做了google搜索的很多,我必须找到一些解决方案来解决这个问题。 Regards

+0

似乎你没有关闭连接。 – Reniuz

+0

在执行查询之前,数据库连接被关闭并重新打开。 – user642378

+0

之后呢?锁定异常可能是因为当你打开数据库连接锁定文件。您需要释放锁定 - 关闭连接。所以确保你真的关闭连接。 – Reniuz

回答

0

从提供的代码似乎您不关闭连接。 ,不知道

注重也在事实上,如果它在你的情况下,相关与否,该Sqlite不支持concurent inserts有时分贝很不错了锁,如果从多个线程操作就可以了。

+0

我在cmd.Dispose方法的最后添加了conn.close方法。并且会监视。感谢您的帮助。 – user642378

0

更改您建立连接和Command对象更喜欢这样的方式:https://stackoverflow.com/a/17592858/8479

确保你不会重复使用在不同的线程来创建它在一个任何sqlite的对象。

SQLite是通常在大并发只要你遵循这些两个规则。