- ベストアンサー
AccessDBへのInsertとSelectタイミングについて
- 現在.NET Framework 3.5にて業務アプリを開発しています。主にデータベース編集を目的としたアプリです。(DBはAccess2000)Insert/Deleteについては、データソース接続し、TableAdapterのクエリを利用しています。Selectについては、Microsoft.Jet.OLEDB.4.0経由で取得しています。このような条件で、Insert/Delete処理を行った直後にSelect処理でデータを取得すると、Insert/Deleteが反映されていないデータが取得されてしまいます。
- InsertとSelectのタイミングに関する問題です。現在、.NET Framework 3.5で開発している業務アプリでは、データベース編集が主な目的です。使用しているデータベースはAccess2000です。Insert/Delete処理では、データソースに接続し、TableAdapterのクエリを使用しています。一方、Select処理では、Microsoft.Jet.OLEDB.4.0を経由してデータを取得しています。しかし、Insert/Delete処理の直後にSelect処理を行うと、反映されていないデータが取得されてしまいます。
- AccessDBへのInsertとSelectのタイミングに関する問題です。私は現在.NET Framework 3.5を使用して業務アプリを開発しています。このアプリケーションは主にデータベース編集を目的としており、データベースはAccess2000を使用しています。Insert/Delete処理では、データソースに接続し、TableAdapterのクエリを使用しています。一方、Select処理では、Microsoft.Jet.OLEDB.4.0を通じてデータを取得しています。しかし、Insert/Delete処理後に直ちにSelect処理を行うと、反映されていないデータが取得されてしまいます。これを回避する方法はありますか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>Insert/DeleteもTableAdpterのCommand経由ではなく、 >OLEDBのCommandで >行ってみては?という内容で間違いないでしょうか? そうです。本来はこういう場合はトランザクション処理 をして、データの出し入れに矛盾をきたさないように するのですが。あまり、その場しのぎはよくないのでは。 トランザクション処理となると少しプログラムが追加 になりますが、 >かなり改修規模が大きくなってしまうので ということであれば、あれもこれもとお勧めするのは 躊躇します。
その他の回答 (2)
- 山本 俊男(@yamamoto007)
- ベストアンサー率44% (4/9)
次の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処理 ご参照ください。
お礼
ご回答ありがとうございます。 いろいろなサイトを調べたところ、OLEDB接続を一度閉じ再度オープンし対応している方がいました。 両方試しまして、結果を報告したいと思います。
- piroin654
- ベストアンサー率75% (692/917)
Commndオブジェクトを使って、SQL文(Insert/Delete)を 指定して、Executeした後、Select処理したらどうなりますか。
お礼
早速の回答ありがとうございます。 Insert/DeleteもTableAdpterのCommand経由ではなく、OLEDBのCommandで 行ってみては?という内容で間違いないでしょうか? かなり改修規模が大きくなってしまうので、確認でき次第報告します。
お礼
回答ありがとうございます。 やはりトランザクション処理はすべきですね。 まずはプロトタイプリリースを優先させるべく、一度接続を解除する方法で 回避しました。 正式リリース時には根本解決の為、トランザクション処理を追加して行きます。 的確なアドバイスありがとうございました。