SQLite数据库锁定异常

我正在从 异常,仅适用于某些查询。 *

下面是我的代码:执行任何select语句时,它都可以正常工作。

当我在JobsTable 上执行任何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.ReadCommitted);

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

发现异常:类型:System.Data.SQLite.SQLiteException消息:数据库已锁定数据库已锁定源:System.Data.SQLite

Stacktrace:位于System.Data.SQLite.SQLiteDataReader.NextResult()位于System.Data.SQLite.SQLiteDataReader..ctor处System.Data.SQLite.SQLite3.Step(SQLiteStatement

stmt)(位于System.Data处的SQLiteCommand cmd,CommandBehavior行为)在d:\ Projects \

C#Applications \ Completed Projects \ TimeSheet6 \ TimeSheet6 \

DbOp中的TimeSheet6.DbOp.ExecuteNonQuery(String

sql)处的System.Data.SQLite.SQLiteCommand.ExecuteNonQuery()处的.SQLite.SQLiteCommand.ExecuteReader(CommandBehavior行为)。

cs:第103行

回答:

连接一直保持打开状态。摆脱OpenConnectionCloseConnection和改变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数据库锁定异常 的全部内容, 来源链接: utcz.com/qa/428668.html

回到顶部