DOBON.NET DOBON.NETプログラミング掲示板過去ログ

1つのフォーム上に複数のDataSetは、仕様上許されない事?

環境/言語:[WindowsXP、VB.NET、SQLServer]
分類:[.NET]

賢人の皆様にご指導を賜りたく思い、書込みさせて頂きます。

質問は、1つのフォーム上にトランザクション用のDataSetとマスタ用のDataSetを設けているのですが、このような造りは、そもそもVB.NET上許されている仕様なのでしょうか。

トランザクション用のDataSetは、DBに対して読み書きがあります。
マスタ用のDataSetは、フォームロード時にDBから取込みを行なったあと、DBへのアクセスはしません。主にコンボボックスのデータとして使用してます。

DBへのアクセス負担を少しでも解消しようと考え、DataSetを別々としたのですが、そのためか色々と不具合が見られるようになってしまいました。
例えば、トランザクション用のDataSetにFillメソッドにてデータを取込んでも、バインドしている各テキストボックスにデータが表示されない等。
(一旦、マスタ用のDataSetをClearして、データを取込むと表示されます。)


ネット上を色々と探してみましたが、1つのフォームで複数のDataSetを使用しているサンプルも見当たらず、途方に暮れております。

もし、なんらかの情報をお持ちの方は、教えて頂けないでしょうか。
「そんな造りはおかしい」ということでも結構です。

つたない説明でわかり難いかもしれませんが、よろしくお願い致します。
一つのデータセットの中に2つのデータテーブルを持つのが普通だと思いますよ。
うーん
データセットはどうやっても問題ないです。
ただバインドをがりがりやりたいと1つのほうが便利ではありますね。

#ぜんぜん解決策じゃないですが(^^;;
trapemiyaさん、中博俊さん、返信ありがとうございます。

ん〜、やっぱり、邪道な作りなんですかね。1フォームに複数データセットって。


> 一つのデータセットの中に2つのデータテーブルを持つのが普通だと思いますよ。

この場合、片方のデータテーブルだけにFillメソッドにて新たなデータを取込みたい場合でも、もう片方のデータテーブルにもFillメソッドにてデータを取込む必要があるんですよね。この場合、DBへの無駄なアクセスって増えますよね? 何かよい対策案ってあるのでしょうか?

私が思いついているのは、
=========================================================================
Me.OleDbConnection1.Open()

'DBより一時データセットに情報を取得する。
Me.OleDbDataAdapter1.Fill(dataSetTemp) 'テーブル1用(トランザクション)
Me.OleDbDataAdapter2.Fill(dataSetTemp) 'テーブル2用(マスタ)

Me.OleDbConnection1.Close()

'データセットを初期化する。
dataSet.Clear()
'データセットに取得したレコードをマージする。
dataSet.Merge(dataSetTemp)
=========================================================================
をトランザクションのデータを変更する度に実行するしかないかと。
Me.OleDbDataAdapter2.Fill(dataSetTemp) 'テーブル2用(マスタ)
が、無駄なので、何とかならないものかと思うのですが。


> データセットはどうやっても問題ないです。

「どうやっても問題ない」っていうのは、どういう意味でしょうか。
1フォームに複数のデータセットを置いても、基本的には動作するよって事でしょうか? それとも別の意味でしょうか。

よろしければ、もう少しわかりやすい説明をお願い致します。

DOBON.NET | プログラミング道 | プログラミング掲示板