前提・実現したいこと
処理AでmdbのテーブルTへデータをDelete&Insertしている間、処理Bは処理A開始前のテーブルTをSelectしたいです。
以下にイメージを記載いたします。
- 処理A開始前、mdbのテーブルTにデータが100件ある。
- 処理Aは、テーブルTから100件Deleteし、90件Insertする。
- 処理A処理中、処理Bはmdbから100件Selectしたい。
発生している問題・エラーメッセージ
データコピーの処理にトランザクションを貼ると(下記コードの★箇所から◆箇所まで)、
Select処理で以下のメッセージが発生します。
テーブル 'テーブルT' はほかのユーザーが排他的に開いているか、既にユーザー インターフェイスを介して開いているので、プログラムによって操作することはできません。
該当のソースコード
C#
1OleDbTransaction transaction = connMdb.BeginTransaction(IsolationLevel.ReadCommitted); 2xxxTableTAdapter.SetTransaction(transaction); // ★ここから、mdbをSelectする処理で例外が発生する。 3xxxTableTAdapter.Delete(); 4foreach (DataRow row in xxxDs.tblXXX.Rows) 5{ 6 OleDbCommand cmd = new OleDbCommand(); 7 cmd.Connection = connMdb; 8 cmd.Transaction = transaction; 9 cmd.CommandText = "INSERT INTO テーブルT・・・"; 10 cmd.ExecuteNonQuery(); 11} 12transaction.Commit(); // ◆ここまで、mdbをSelectする処理で例外が発生する。
試したこと
IsolationLevel.ReadCommittedを、ReadUncommittedに変えても、同じ例外が発生します。
補足情報(FW/ツールのバージョンなど)
- Visual Studio 2005、Access2000形式のmdbで開発しています。
- 接続文字列は以下のとおりです。
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\xxx.xxx.xxx.xxx\foldername\mdb\xxx.mdb;Jet OLEDB:Database Password=xxx;"
- 情報に不足があればご指摘ください。どうぞよろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー