9

私はOleDbConnectionしばらくの間、キャッシュしないようにしようと戦ってきました。基本的に、別のアプリケーションから書き込まれている共有Accessデータベースにアクセスしてから、値を読み戻しています(Last Write時間とそれに続く1秒の遅延によってフラッシュされることを確認しました)。

残念ながら、これは完全に信頼できません。

私は接続プールを無効にする方法を読んでいます(そして狂っています)、そしてその後、可能な更新のたびに、再接続する前に次のことを実行しています:

_connection.Close();
_connection.Dispose();
_connection = null;
OleDbConnection.ReleaseObjectPool();
GC.Collect();

これに加えて、接続文字列は。を使用した接続プールを無効にしますOLE DB Services = -2。最後に、PageTimeoutJet4.0のレジストリでも「10」に変更しました。

残念ながら、これらの対策はすべて効果がありません。今、私が考えることができるのは、このMicrosoft KBの記事に記載されていることだけです。そして、を呼び出しますJRO.JetEngine.RefreshCache。それに関する唯一の問題は、その引数がであるということADODB.Connectionです。データベースレイヤー全体と、ソフトウェアによってレコードが読み取られている場所を書き直して、この機能を実現するためだけにレガシーCOMオブジェクトを使用したいのですが、それが唯一の方法のようです。

私の質問は、現在ADODB(ADO.NETでさえも!)を使用するように書き換えるこのタスクを実行しているときに、?のキャッシュを無効にすることは可能OleDbConnectionですか?

4

3 に答える 3