[英]sqlite database is locked exception
我正在使用 c# 應用程序並在服務器機器中將應用程序作為 Windows 服務運行。當我從客戶端機器執行插入、更新刪除操作時,它會引發數據庫鎖定錯誤,如下所示,
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();
}
}
}
請幫助我,我已經做了很多谷歌搜索,我必須找到一些解決方案來解決這個問題。 問候
從提供的代碼看來,您沒有關閉連接。
還要注意事實,不知道它是否與您的情況相關,如果您從多個線程對其進行操作, Sqlite
在支持並發inserts
方面不太好,有時 db 會鎖定。
將創建 Connection 和 Command 對象的方式更改為更像這樣: https ://stackoverflow.com/a/17592858/8479
確保您沒有在與創建它的線程不同的線程上重新使用任何 Sqlite 對象。
只要您遵循這兩個規則,Sqlite 通常在並發方面表現出色。
就我而言,關閉連接不是問題。 問題是我打開和關閉每個表的連接,盡管數據庫是相同的。 所以不要在 SQlite 中為同一個數據庫多次打開連接。
SQlite 不擅長處理這個問題。 因此,如果您負擔不起該解決方案,最好使用 SQLServer 等服務器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.