簡體   English   中英

sqlite 數據庫被鎖定異常

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM