3

私たちは、MS Access を使用する主要な VB6 取引アプリケーションを持っています (質問しないでください!) それは、常に MS Access データベースに取引を吹き込みます。

ここのインフラストラクチャの残りの部分はかなり進んでおり、この Access データベースを定期的に読み取り、新しい取引を SQL サーバー データベースにコピーしたいと考えています。

これを行うために必要な SQL と C# は、非常に簡単です。

しかし、Access データベースをロックしたり、VB6 アプリに問題を引き起こしたりしないような方法で確実に実行したいと考えています。つまり、Access から DataTable を作成するときに、データベースをロックして、VB6 アプリがデータベースに書き込めないようにしたくありません。古い ADO には、この目的で使用できる共有モードがあったことを覚えているようです。

これを実現するには、.NET からどのような接続文字列を使用すればよいですか?

4

4 に答える 4

1

Matt の回答に基づいて構築するには、adOpenForwardOnly と adLockReadonly: ForwardOnly の組み合わせをお勧めします。これは、これらの取引を SQL Server に挿入するだけで済み、Readonly を使用して他のプロセスをロックアウトしないためです (他に何がこれらのテーブルにヒットしますか?)。幸いなことに、これらはデフォルトのオプションです。:)

于 2008-11-14T16:07:28.513 に答える
0

単なるアイデアですが、データベースをアップグレードして、テーブル自体が実際に SQL Server に格納され、Access がフロント エンドになることを考えたことはありますか? 少し時間が経ちましたが、私の記憶が正しければ、Access には、これを行うのに役立つウィザード (ヤバイ!) があるはずです。

古い ADO では、カーソルまたはロックの種類のメカニズムを次のいずれかに設定できました。

カーソルの種類

adOpenForwardOnlyこの種類のカーソルは、レコードセット内を前方に移動するためにのみ使用できます。このオプションは、リスト ボックスまたはコンボ ボックスに値を設定する場合に使用します。

adOpenKeysetこれは、レコードセットに影響を与える可能性のあるデータに変更が加えられたときに通知されないため、大きなレコードセットが予想される場合に使用するのに最適な種類のカーソルです。

adOpenDynamicこのカーソルを使用すると、レコードセットに影響を与える、他のユーザーによって行われたすべての変更を確認できます。これは最も強力なタイプのカーソルですが、最も遅いタイプです。

adOpenStatic静的カーソルは、レコードセットが小さい場合に便利です。

ロックタイプ

adLockReadonlyこのロック モードは、レコードセットからの追加、更新、または削除が許可されていない場合に使用されます。

adLockPesimisticペシミスティック ロックでは、レコードは編集が開始されるとすぐにロックされ、編集が完了するまでロックされたままになります。

adLockOptimisticこれは、更新メソッドがレコードで呼び出されたときに発生します。レコードは編集中でもロック解除されますが、変更がデータベースに保存されると一時的にロックされます

adLockBatchOptimisticこのオプションを使用すると、レコードのバッチを更新するときに楽観的ロックを実行できます

それが .NET の世界に正確にどのように変換されるかはわかりませんが、これで正しい方向に進むことができるかもしれません。

于 2008-11-14T15:55:42.047 に答える
0

ADO(OLEDB)接続を介して読み取り専用のレコードセットを開くなど、複数のソリューションがあります。これらのレコードセットは、後で使用するために xml ファイルとしてローカルに保存/アーカイブすることもできます。

しかし、最も単純な解決策は、元の mdb ファイルのコピーを作成することです (テーブルの一部がロックされていても、いつでも実行できます)。その後、実行中の VB6 アプリケーションに干渉するリスクなしに、コピーされたデータベースで必要なことを行うことができます。

于 2008-11-16T21:26:25.733 に答える
0

データベースに最初に接続するユーザーは、そのデータベースが開いている間に使用されるロック モードを決定します。

接続文字列のモードを「読み取り」に設定すると、うまくいくはずです。

"Data Source=C:\IronSpeed\TestAccessDB\TestTypes.mdb;
Jet OLEDB:Database Locking Mode=1;
Mode=Read"

役立つかもしれないいくつかのリンク。

于 2008-11-14T16:03:21.173 に答える