我正在使用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();
}
}
}
请帮助我,我已经做了很多谷歌搜索,我必须找到一些解决方案来解决这个问题。 此致
答案 0 :(得分:0)
从提供的代码似乎您没有关闭连接。
还要注意事实,不知道你的情况是否相关,Sqlite
支持concurent inserts
并且有时db会锁定,如果你操作的话不是很好它来自多个线程。
答案 1 :(得分:0)
将创建Connection和Command对象的方式更改为:https://stackoverflow.com/a/17592858/8479
确保您不会在与其创建的线程不同的线程上重复使用任何Sqlite对象。
如果遵循这两条规则,Sqlite通常很擅长并发。