数据库被锁定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();
}
它总是返回一个错误:在Database is locked
行:
int rows = sqCommand.ExecuteNonQuery();
WHU不会发生?
答
我敢打赌,数据库连接是离开的时候sqCommand.ExecuteNonQuery()
方法执行开放的地方(这锁仍适用于以前的连接),因此你需要通过包装每SQLiteConnection
实例与using
语句块这样的重构:
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
}
}
参考:
请发表你的'sql'变量的值。 – wdosanjos