2017-03-20 2 views
0

UWPアプリケーションを開発中で、ボタンクリックイベントでデータベーステーブルに行を挿入しようとしています。SQLitePCL.SQLiteResultは、データベース接続を破棄した後でも、ステップ()で "BUSY"を返します。

SQLiteConnection dbConnection = new SQLiteConnection 
     (Path.Combine(ApplicationData.Current.LocalFolder.Path + "\\" + fileName + "\\" + fileName + ".db")); 

var selectDB = @"*sample insert statement*"; 

ISQLiteStatement selectCall = dbConnection.Prepare(selectDB); 

var t = selectCall.Step(); 

dbConnection.Dispose(); 
dbConnection = null; 

selectCall.Dispose(); 
selectCall = null; 

挿入クエリは最初に正常に実行されます(var t = "DONE")。私が直面している問題は、最初の実行後、何らかの理由でデータベースがロックされている(var t = "BUSY")ということです。 Dispose()関数を呼び出しても同じ問題が解決されます。私はここに何かを逃していますかそれを行うためのより良い方法はありますか?これはSQLiteで初めての作業です。ご協力ありがとうございました。

答えて

1

これらのDisposeコールが実際に発生するという保証はありません(例外またはその他のフロー制御ステートメントが干渉する可能性があります)。

オブジェクトが配置されていることを確認するために、あなたはusingを使用する必要があります。

using (var conn = new SQLiteConnection(...)) 
using (var selectCall = conn.Prepare("...")) 
{ 
    var t = selectCall.Step(); 
    ... 
} 
0

私はすぐに私のデータベースをダウンロードしたとして、データベース接続を確立し、それは私の問題を修正しました。この問題は、データベースの操作ごとに新しい接続を作成するときに発生し、その結果、ロックされたデータベースが作成されました。その接続を破棄してもこの問題は解決されません。接続オブジェクトをnullに設定しても役に立ちません。だから、単一のデータベース接続オブジェクトを使用して問題を解決しました。これは一般的な慣行であるべきです。この答えが助けられたらと思っています。

関連する問題