C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 39 を表示中)
■20393 / )  Re[8]: MDBの更新を即反映させたい
□投稿者/ 魔界の仮面弁士 (767回)-(2008/06/10(Tue) 12:47:20)
No20384 (鶏唐揚 さん) に返信
> 調べたところReadキャッシュが原因のような気がしてきました。
もしそうならば、Page Timeout 設定時間の以上のウェイトをかけてから読み込めば、
キャッシュの問題はクリアされるかと思います。既定値では長すぎるので、
キャッシュのタイムアウト時間は短めに設定する必要があるでしょうけれども。


> JROを参照しないと
参照設定に加えずとも、レイトバインドで呼び出せますよ。

CreateObject("JRO.JetEngine").RefreshCache(conn)

ただ、その引数には(接続文字列では無く)ADODB.Connection が要求されますし、
JRO が ADO.NET に対しても有効であるという資料は見たことが無いので、
今回の目的で利用できるかどうかは未知数ですけれども。


> 接続はSystem.Data.OleDBを使用しています
ADO.NET で制御できるのは、プロバイダ固有の接続パラメータぐらいですね。

ただ、最近のバージョンの Jet OLE DB プロバイダだと、なぜか一部のプロパティ
("Jet OLEDB:Page Timeout"、"Jet OLEDB:Flush Transaction Timeout" など)が
ADO / ADO.NET に関わらず指定できなくなっている場合があるため、細かいパラメータは、
先述したレジストリ指定の方が良いかも知れません。

Dim cb As New OleDb.OleDbConnectionStringBuilder()
cb.Provider = "Microsoft.JET.OLEDB.4.0"
cb.DataSource = "c:\db1.mdb"
cb.Add("Jet OLEDB:Registry Path", "Software\MyCompany\MyApp\1.0")

上記のようにすると、キャッシュのフラッシュ間隔やバッファサイズなどを
HKEY_LOCAL_MACHINE\SOFTWARE\MyCompany\MyApp\1.0 から読み取られるようになります。


> 重要なデータ取得時にDBをCloseしてOpenする方法を考えています
その方法は DAO では有効ですが、OLE DB の場合はコネクション プーリングの
機構があるため、必ずしもフラッシュされるとは限らなかったりします。
ADO.NET が接続プールを有効にしているのかどうかは未検証ですが、もし有効で
ある場合には、接続文字列の一部を変更してから(大文字小文字の違いでも良い)
再 Open した方が良いかも知れません。
返信 編集キー/


管理者用

- Child Tree -