2017-11-01 16 views
-2

ロックされている私は2つのクエリを持っていますが、更新cmd2.ExecuteNonQuery();にそれは例外「データベースがロックされている」スロー:SQLiteデータベースは#2

if (txt_balance.Text != "") 
{ 
    using (SQLiteConnection con = new SQLiteConnection(obj.getDbSourceFile)) 
    { 
     con.Open(); 
     SQLiteCommand cmd1 = new SQLiteCommand("SELECT [supplier_balance] FROM [s_supplier] where supplier_name='" + comboPurchaseSupplier.Text + "'", con); 
     SQLiteDataReader DR = cmd1.ExecuteReader(); 
     // hfcconn.Close(); 
     if (DR.HasRows) 
     { 
      if (DR.Read()) 
      { 
       //hfcconn.Open(); 
       using (SQLiteConnection con2 = new SQLiteConnection(obj.getDbSourceFile)) 
       { 
        SQLiteCommand cmd2 = new SQLiteCommand("update [s_supplier] set supplier_balance=" + (DR.GetInt32(0) + Convert.ToInt32(txt_balance.Text)) + " where supplier_name='" + comboPurchaseSupplier.Text + "'", con2); 

        con2.Open(); 
        cmd2.ExecuteNonQuery(); 


        DR.Dispose(); 
        // con.Close(); 
       } 
      } 
     } 
    // con.Close(); 
    } 
} 
+0

「例外データベースがロックされています」例外のタイプ、メッセージ、スタックトレースなど、例外の詳細を投稿に含めてください。 – mjwills

+1

あなたの似たタイトルの記事が1366件ありました。それらのいずれかをチェックしましたか?私はあまりにもフォーマットされていないコードを修正するのは疲れましたが、SQLを作成する正しい方法ではありません - SQLパラメータを使用 – Plutonix

答えて

1

問題は、あなたが2つの接続を使用していることです。

接続(およびそれらのトランザクション)は互いに分離されているため、2番目の接続では、最初の接続にオープンリーダーがまだ存在するテーブルを更新できません。

+0

私は読者を処分し、 'using(SQLiteConnection con = new SQLiteConnection(obj.getDbSourceFile) @CLを閉じる。 –

+0

しかし、それが起こる前に2番目のステートメントが実行されます。 –

+0

私は例外DBがロックされている別の更新クエリを持っており、それは別のusing節@CLにあります。 –