こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

AccessDBへのInsertとSelectタイミングについて

AccessDBへのInsertとSelectタイミングについて

現在.NET Framework 3.5にて業務アプリを開発しています。
主にデータベース編集を目的としたアプリです。(DBはAccess2000)

Insert/Deleteについては、データソース接続し、TableAdapterのクエリを利用しています。
Selectについては、Microsoft.Jet.OLEDB.4.0経由で取得しています。

このような条件で、Insert/Delete処理を行った直後にSelect処理でデータを取得
すると、Insert/Deleteが反映されていないデータが取得されてしまいます。

これを回避する方法を教えてください。
(非常に低レベルな質問かと思いますが、何卒よろしくお願い致します。)

投稿日時 - 2010-06-03 15:52:18

QNo.5942016

困ってます

質問者が選んだベストアンサー

>Insert/DeleteもTableAdpterのCommand経由ではなく、
>OLEDBのCommandで
>行ってみては?という内容で間違いないでしょうか?

そうです。本来はこういう場合はトランザクション処理
をして、データの出し入れに矛盾をきたさないように
するのですが。あまり、その場しのぎはよくないのでは。
トランザクション処理となると少しプログラムが追加
になりますが、

>かなり改修規模が大きくなってしまうので

ということであれば、あれもこれもとお勧めするのは
躊躇します。

投稿日時 - 2010-06-03 18:40:00

お礼

回答ありがとうございます。

やはりトランザクション処理はすべきですね。

まずはプロトタイプリリースを優先させるべく、一度接続を解除する方法で
回避しました。

正式リリース時には根本解決の為、トランザクション処理を追加して行きます。

的確なアドバイスありがとうございました。

投稿日時 - 2010-06-07 09:20:11

このQ&Aは役に立ちましたか?

15人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(3)

ANo.2

次の2つの方法でお試しください.
(1)Insert/Delete処理を行った直後
...
connForInsert.Close();
connForInsert = null;
//新しい接続Forクエリ
connForSelect = new System.Data.OleDb.OleDbConnection(strConn);
...

(2)Insert/Delete処理を行った直後
.... //insert処理
System.Threading.Thread.Sleep(500);
.... //Select処理

ご参照ください。

参考URL:http://www.werunsoft.com/tips.aspx?db=access&id=80

投稿日時 - 2010-06-03 17:26:54

お礼

ご回答ありがとうございます。

いろいろなサイトを調べたところ、OLEDB接続を一度閉じ再度オープンし対応している方がいました。

両方試しまして、結果を報告したいと思います。

投稿日時 - 2010-06-03 18:05:50

ANo.1

Commndオブジェクトを使って、SQL文(Insert/Delete)を
指定して、Executeした後、Select処理したらどうなりますか。

投稿日時 - 2010-06-03 17:25:19

お礼

早速の回答ありがとうございます。

Insert/DeleteもTableAdpterのCommand経由ではなく、OLEDBのCommandで
行ってみては?という内容で間違いないでしょうか?

かなり改修規模が大きくなってしまうので、確認でき次第報告します。

投稿日時 - 2010-06-03 18:03:04

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-