6

接続文字列を次のように使用して、System.Data.SQLiteインメモリデータベースを作成しています

"Data Source=:memory:", 

マルチスレッド間でこのデータベースにアクセスしたい。

ここで私が行うことは、オブジェクトのクローンを作成し、SQLiteConnectionそのコピーをワーカースレッドに渡すことです。

しかし、実際には、異なるスレッドが共有データベースではなく、インメモリデータベースの個々のインスタンスを取得することがわかりました。スレッド間で1つのインメモリデータベースを共有するにはどうすればよいですか?

ありがとう!

4

1 に答える 1

6

インメモリデータベースのSQLiteドキュメントに基づいて、file::memory:?cache=shared代わりにURIファイル名規則などで名前が付けられたデータソースを試してみます:memory:(特に、すべての接続が使用するように指示されているキャッシュ名に注意してください)。このページで説明されているように、aのすべてのインスタンスは、:memory:あなたが見つけたとおり、互いに区別されます。

インメモリデータベースに接続する前に、最初に共有キャッシュモードを有効にする必要がある場合もあることに注意してください(これを機能させるには、共有キャッシュのドキュメントでを呼び出して指定されています) sqlite3_enable_shared_cache(int)

于 2012-09-14T03:16:33.870 に答える