1

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

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

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

4

2 回答 2

0

从提供的代码看来,您没有关闭连接。

还要注意事实,不知道它是否与您的情况相关,如果您从多个线程对其进行操作,那么Sqlite支持并发性和有时 db 的锁定效果不是很好。inserts

于 2012-10-05T07:05:58.170 回答
0

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

确保您没有在与创建它的线程不同的线程上重新使用任何 Sqlite 对象。

只要您遵循这两个规则,Sqlite 通常在并发方面表现出色。

于 2015-04-13T12:05:29.927 回答