大佬教程收集整理的这篇文章主要介绍了SQLite数据库锁定异常,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
连接一直保持打开状态。摆脱OpenConnection
与CloseConnection
和改变ExecuteNonquery
这样的:
using (sqliteConnection c = new sqliteConnection(ConnectionString))
{
c.open();
using (sqliteCommand cmd = new sqliteCommand(sql, C))
{
cmd.ExecuteNonquery();
}
}
此外,将 数据的方式更改为此:
using (sqliteConnection c = new sqliteConnection(ConnectionString))
{
c.open();
using (sqliteCommand cmd = new sqliteCommand(sql, C))
{
using (sqliteDataReader rdr = cmd.ExecuteReader())
{
...
}
}
}
像在这里一样自行管理连接池。首先,它比您编写的代码复杂得多,但是其次,它已经在sqliteConnection
对象内部进行了处理。最后,如果您没有利用using
,您将 正确 这些对象,最终会遇到诸如现在所看到的问题。
我正在从 sqlite* 获得 数据库被锁定的 异常,仅适用于某些查询。 *
下面是我的代码:执行任何SELEct语句时,它都可以正常工作。
当我在Jobs
Table 上执行任何write语句时,它也可以正常工作。
这很好用:
ExecuteNonQuery("deletE FROM Jobs WHERE id=1");
但是以同样的方式,如果我对employees
表执行查询,则会引发 数据库被锁定 的异常。
这将引发异常:
ExecuteNonQuery("deletE FROM employees WHERE id=1");
以下是我的功能:
public bool OpenConnection()
{
if (Con == null)
{
Con = new sqliteConnection(ConnectionString);
}
if (Con.State == ConnectionState.Closed)
{
Con.open();
//Cmd = new sqliteCommand("PRAGMA FOREIGN_KEYS=ON",Con);
//Cmd.ExecuteNonQuery();
//Cmd.Dispose();
//Cmd=null;
return true;
}
if (IsConnectionBusy())
{
Msg.Log(new Exception("Connection busy"));
}
return false;
}
public Boolean CloseConnection()
{
if (Con != null && Con.State == ConnectionState.open)
{
if (Cmd != null) Cmd.Dispose();
Cmd = null;
Con.Close();
return true;
}
return false;
}
public Boolean ExecuteNonQuery(String sql)
{
if (sql == null) return false;
try
{
if (!OpenConnection())
return false;
else
{
//Tx = Con.begintransaction(isolationLevel.ReadCoR_876_11845@mitted);
Cmd = new sqliteCommand(sql,Con);
Cmd.ExecuteNonQuery();
//Tx.Commit();
return true;
}
}
catch (Exception exception)
{
//Tx.RollBACk();
Msg.Log(exception);
return false;
}
finally
{
CloseConnection();
}
}
这是例外:在第103行: Cmd.ExecuteNonQuery();
以上是大佬教程为你收集整理的SQLite数据库锁定异常全部内容,希望文章能够帮你解决SQLite数据库锁定异常所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。