2

OleDB を介してテーブルにいくつかの行を挿入し、挿入された行を即座に選択します。

この方法で行を取得することはできません。3〜5秒。そして、挿入された行がテーブルに表示されます。

データベース自体でこの動作を観察しました。OleDB を介して行を挿入し、Access で開かれたテーブルを監視しました。行は 3 ~ 5 秒後にテーブルに表示されました。

Access は行をバッファリングしますか? OleDB 経由でフラッシュやコミットなどを送信する必要がありますか?

どんな提案でも非常に役に立ちます。

(ビジネスロジックや他の方法でこれを解決しない理由を尋ねないでください....)

4

1 に答える 1

3

いくつかのテストを行ったところ、ACE OleDb でバッファリングが行われているようです。見つけた

  1. いくつかの INSERT を実行し、すぐに同じ OleDbConnection で SELECT を実行すると、新しい行がすぐに利用可能になりました。

  2. 2 つの OleDbConnection オブジェクトを開いて INSERT を実行しcon1、すぐにcon2新しい行を SELECT すると、接続で使用可能になるまでに約 5 秒かかりましたcon2

  3. 2 つの OleDbConnection オブジェクトを開いた場合、 INSERTed on con1、 did con1.Close()、すぐにcon2新しい行を SELECTed すると、すぐに使用できるようになりました。

そのため、OleDbConnection を閉じると、書き込みが「フラッシュ」され、他の接続ですぐに使用できるようになる効果があるようです。私の推測では、ACE/Jet は共有ファイル データベースであり、データベース ファイルの競合を減らそうとしているため、OleDb は暗黙的に更新をバッファリング (または「バッチ処理」) していると思います。

(SQL Server を使用して同じテストを行ったところ、ケースを閉じたときと開いたままにしたときとの間に大きな違いはありませんでしたcon1。すべてのケースで、新しいレコードがすぐに利用可能になりました。)

于 2013-06-12T10:47:07.760 に答える