2017-10-09 104 views
0

我創建了一個sqlite數據庫,並且試圖用這個函數連接。無法在數據庫中插入值?(錯誤:數據庫文件被鎖定)

void AddScores(string conn) 
    { 
     IDbConnection dbconn; 
     dbconn = (IDbConnection)new SqliteConnection(conn); 
     dbconn.Open(); 

     using(IDbCommand dbCmd = dbconn.CreateCommand()) 
     { 
      // string sqlQuery = "SELECT Id FROM PickAndPlace "; 
      string sqlQuery= "INSERT INTO PickAndPlace (Id) VALUES (324)"; 
      dbCmd.CommandText = sqlQuery; 

      using(IDataReader reader = dbCmd.ExecuteReader()) 
      { 
       while (reader.Read()) 
       { 
        print(reader.GetInt32(0)); 
       } 
       dbconn.Close(); 
       reader.Close(); 
       dbCmd.Dispose(); 
      } 
     } 
    } 

下面的代碼無法正常工作,如果我嘗試插入值......這正顯示出這個錯誤「數據庫文件被鎖定: 數據庫被鎖定」但如果我嘗試選擇此工作得很好。那麼我的錯誤在哪裏?

回答

0

Sqlite通常接受一個「連接」。一旦一個應用程序連接到數據庫,這意味着只需獲取一個寫入鎖定,其他應用程序就不能訪問它進行寫入,但可以訪問它進行讀取。這只是你所看到的行爲。請參閱File Locking And Concurrency Control in SQLite Version 3瞭解更多有關如何工作的詳細信息,各種鎖定狀態等。

但是原則上,您只能打開一個連接。所以不知怎的,你有不止一個。要麼你忘記關閉一些連接,要麼多個線程或應用程序試圖修改它。或者可能發生了一些錯誤,並使鎖定文件處於不良狀態。