2012-02-08 11 views
1

背景:スレッドSQL CEデータベースに安全にアクセスする方法

私のWindows Phoneプロジェクトでは、私は日付を格納するためにローカルSQL CEデータベースを使用します。プログラムでLINQ to SQLを使用してデータベーステーブルを作成します。

このデータベースは、複数のスレッドのさまざまなdatacontextインスタンスを通じてアクセスされます。

私はすべてのデータを消去し、ログアウトする私のアプリのユーザーに選択肢を与える:

は、ここで問題です。ユーザーがこれを選択すると、datacontextのDeleteDatabaseメソッドを使用してデータベースを削除します。しかし、私はいつもデータベースが別のプロセスで使用されているというエラーを受け取り、削除できません。

正しい方向のナッジが私の一日になります。

+1

DBの削除を呼び出すと、接続はまだ開いていますか? DBにアクセスして他の何かにアクセスできないプロセスが最も好きです。 –

+0

私は知っているすべての接続を閉じたことが分かりました。データベースを使用しているプロセスを取得して終了させる方法はありますか? – andy

+4

DataContextのすべてのインスタンスを、ステートメントやDisposeを使用して折り返しますか? – ErikEJ

答えて

3

上記のAndy(正直彼らが私を打ち負かす)は、別のプロセスがまだ接続を開いているときにデータベースにアクセスしていた問題です。基本的には簡単にあなたがそうのように使用してブロックの内部データベースに対して実行するすべてのコードを配置して固定することができます。

using (MyDataContext db = new MyDataContext("isostore:/MyData.sdf")) 
{ 
    //Run database logic here 
} 

私はそれがエラーのために完璧な理にかなっているという意味でね。 WP7で開いているファイルでも同じことが起こります。

詳しくは、pageを参照してください。

+0

こんにちは私は私がどこでもブロックを使用して使用したが、私はエラーを与えるデータベースを削除しようとしているときにこの方法を試してみました。 –