私はOleDbConnection
しばらくの間、キャッシュしないようにしようと戦ってきました。基本的に、別のアプリケーションから書き込まれている共有Accessデータベースにアクセスしてから、値を読み戻しています(Last Write時間とそれに続く1秒の遅延によってフラッシュされることを確認しました)。
残念ながら、これは完全に信頼できません。
私は接続プールを無効にする方法を読んでいます(そして狂っています)、そしてその後、可能な更新のたびに、再接続する前に次のことを実行しています:
_connection.Close();
_connection.Dispose();
_connection = null;
OleDbConnection.ReleaseObjectPool();
GC.Collect();
これに加えて、接続文字列は。を使用した接続プールを無効にしますOLE DB Services = -2
。最後に、PageTimeout
Jet4.0のレジストリでも「10」に変更しました。
残念ながら、これらの対策はすべて効果がありません。今、私が考えることができるのは、このMicrosoft KBの記事に記載されていることだけです。そして、を呼び出しますJRO.JetEngine.RefreshCache
。それに関する唯一の問題は、その引数がであるということADODB.Connection
です。データベースレイヤー全体と、ソフトウェアによってレコードが読み取られている場所を書き直して、この機能を実現するためだけにレガシーCOMオブジェクトを使用したいのですが、それが唯一の方法のようです。
私の質問は、現在ADODB(ADO.NETでさえも!)を使用するように書き換えるこのタスクを実行しているときに、?のキャッシュを無効にすることは可能OleDbConnection
ですか?