2017-10-09 16 views
0

sqliteデータベースを1つ作成しましたが、この関数に接続しようとしました。データベースに値を挿入できません(エラー:データベースファイルがロックされています)

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は単一の「接続」を受け入れます。 1つのアプリケーションがデータベースに接続すると、書き込みロックを取得するだけで、他のアプリケーションは書き込みにアクセスできませんが、読み取りにはアクセスできます。あなたが見ている行動だけです。さまざまなロック状態などの詳細については、File Locking And Concurrency Control in SQLite Version 3を参照してください。

しかし、原則として、1つの接続のみを開くことができます。だから何とかあなたには複数のものがあります。いくつかの接続を閉じるのを忘れるか、複数のスレッドやアプリケーションがそれを変更しようとしています。または、おそらく何らかのエラーが発生し、ロックファイルの状態が悪いままになっている可能性があります。

関連する問題