ASP.NETアプリケーション(フレームワーク4.0)でSystem.Data.SQLiteプロバイダを使用しています。 私が実行している問題は、SQLiteデータベースのテーブルに何かを挿入すると、データベースがロックされ、接続が破棄されてもロックが解除されないということです。SQLiteは、接続が閉じられた後でもデータベースをロックし続けます。
ファイルにアクセスしようとすると、エラーは次のようになります。「別のプロセスで使用されているため、 'catalog.sqlite'ファイルにアクセスできません」
私のコードはかなり簡単です。私は接続を開き、SQLServerデータベースからデータを読み込み、そのデータを(SQLiteDataAdapterを介して)SQLiteに挿入し、接続を閉じてすべてを安全面に配置します。しかし、ファイルがデータで埋められた後にファイルを圧縮しようとすると、エラーが発生します。
私はここでStackOverflowに関するすべての提案を読んだことがありますが、問題の解決に役立っているものはありません(ウイルス対策、トランザクションモデルの変更、数秒待ってからファイルを圧縮し、トランザクションなどには何も含まれていませんが、この問題を解決するのに役立っていないものはありません。
多分、ASP.NETに特有のことがありますか?(マルチスレッドは問題になりますか?その機能と同時性はありませんか?)
私はDataTableとSQLiteDataAdapterを避け、SQLiteCommandを直接使用し、そのようにch腕。もちろん、データアダプタを使用する代わりにクエリを文字列として構築することもできますが、そのためにフレームワークが構築されていると、ちょっと厄介なことに気づくことがあります。
ステートメントを使用してコマンドと接続をラッピングしていますか? – Arran
このロックはアプリケーションによって行われていますか?つまり、終了時にロックが消えますか? –
@Arran私は使用して接続をラップしていません。しかし、私はロックなしで動作するバージョン(別名、データアダプタの代わりにコマンドを使用するバージョン)でもラップしているわけではありません。 –