2012-10-05 157 views
0

我使用C#應用程序和運行在服務器機器service.When我進行將Windows應用程序,更新刪除客戶機上運行,​​它拋出數據庫鎖如下錯誤,SQLite數據庫被鎖定異常

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

請幫我在這,我已經做了google搜索的很多,我必須找到一些解決方案來解決這個問題。 Regards

+0

似乎你沒有關閉連接。 – Reniuz

+0

在執行查詢之前,數據庫連接被關閉並重新打開。 – user642378

+0

之後呢?鎖定異常可能是因爲當你打開數據庫連接鎖定文件。您需要釋放鎖定 - 關閉連接。所以確保你真的關閉連接。 – Reniuz

回答

0

從提供的代碼似乎您不關閉連接。 ,不知道

注重也在事實上,如果它在你的情況下,相關與否,該Sqlite不支持concurent inserts有時分貝很不錯了鎖,如果從多個線程操作就可以了。

+0

我在cmd.Dispose方法的最後添加了conn.close方法。並且會監視。感謝您的幫助。 – user642378

0

更改您建立連接和Command對象更喜歡這樣的方式:https://stackoverflow.com/a/17592858/8479

確保你不會重複使用在不同的線程來創建它在一個任何sqlite的對象。

SQLite是通常在大併發只要你遵循這些兩個規則。