数据库已锁定sqCommand.ExecuteNonQuery()? [英] Database is locked sqCommand.ExecuteNonQuery()?
本文介绍了数据库已锁定sqCommand.ExecuteNonQuery()?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下代码:
string sql = String.Format("insert into {0}({1}) values({2});", tableName, columns, values);
SQLiteConnection myConn = null;
try
{
myConn = new SQLiteConnection(dbConnection);
myConn.Open();
using(SQLiteCommand sqCommand = new SQLiteCommand(sql, myConn))
{
sqCommand.CommandText = sql;
int rows = sqCommand.ExecuteNonQuery();
return !(rows == 0);
}
}
finally
{
myConn.Close();
}
它总是返回错误:数据库已锁定
所在行:
It returns always an error: Database is locked
in line:
int rows = sqCommand.ExecuteNonQuery();
会发生什么?
推荐答案
我敢打赌,当执行 sqCommand.ExecuteNonQuery()
方法(该锁仍适用于先前的连接)时,数据库连接将保持打开状态,因此,您需要通过使用和
语句块将每个 SQLiteConnection
实例包装起来来进行重构,如下所示:
I bet the database connection is left open somewhere when sqCommand.ExecuteNonQuery()
method executed (which the lock still apply for previous connection), hence you need to refactor by wrapping every SQLiteConnection
instance with using
statement block like this:
string sql = String.Format("insert into {0}({1}) values({2});", tableName, columns, values);
using (SQLiteConnection myConn = new SQLiteConnection(dbConnection))
{
try
{
myConn.Open();
using (SQLiteCommand sqCommand = new SQLiteCommand(sql, myConn))
{
sqCommand.CommandText = sql;
int rows = sqCommand.ExecuteNonQuery();
return !(rows == 0);
}
}
catch (Exception e)
{
// do exception handling
}
}
参考:
这篇关于数据库已锁定sqCommand.ExecuteNonQuery()?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文