sqlite数据库是锁定异常

时间:2012-10-05 06:59:30

标签: c# sqlite

我正在使用c#应用程序并在服务器机器上运行应用程序作为Windows服务。当我执行insert时,从客户端机器更新删除操作会引发数据库锁定错误,如下所示,

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();
                        }
                   }
               }

请帮助我,我已经做了很多谷歌搜索,我必须找到一些解决方案来解决这个问题。 此致

2 个答案:

答案 0 :(得分:0)

从提供的代码似乎您没有关闭连接。

还要注意事实,不知道你的情况是否相关,Sqlite支持concurent inserts并且有时db会锁定,如果你操作的话不是很好它来自多个线程。

答案 1 :(得分:0)

将创建Connection和Command对象的方式更改为:https://stackoverflow.com/a/17592858/8479

确保您不会在与其创建的线程不同的线程上重复使用任何Sqlite对象。

如果遵循这两条规则,Sqlite通常很擅长并发。