このエントリーをはてなブックマークに追加このエントリをつぶやく

初心者がVisual C# .NETではまったワナ

Visual C# .NETを使用し始めてからDataSetに苦戦することが多いので、
DataSetまわりで躓いた内容を中心に、取り上げていこうと思います。

第1回目はDataAdapterのFillメソッド。
慣れればすごい便利なのですが、一歩間違うととんでもないいことに・・・。

まず、DataAdapterとは何かについてはこちらをご参照ください。

DataAdapter参考サイト

簡単にいえば、DBのテーブルのデータをDataSetに格納し、変更/追加/削除されたら、Updateを実行する際に変更点をテーブルに反映してくれる便利なものです。

ただ便利なようで、1つ注意しないといけないことが。。。
DataSetにはFill系のメソッドを複数追加することができます。
1つのDataSetに対して複数のFill系メソッドを持っている場合に注意しておかなければならないこと・・・。

Fillした後にデータを変更して新たにFillすると、
最初に実行したFillから新たにFillを行った間に
変更/追加/削除した内容がリセットされてしまうということ。

分ではわかりづらいので実際に順序を追って説明します。

DataSet名:testDb
Fillメソッド名:Fill, FillById

1.testDbに対してFillメソッドを実行する
→この時点ではFillメソッドに設定されているSQLに対応するデータがtestDbに入っています。
2.testDbに対して1件データを新規に追加する。
→この時点ではtestDbにRowStateがAddの状態のデータが1件追加されます。
3.testDbに対してFillByIdメソッドを実行する
→この時点でFillByIdメソッドに設定されているSQLに対応するデータがtestDbに入ります。

ここで注意!
3の時点で2で追加した内容が破棄されます。
それはなぜか。。。3で新たにSELECT文を実行しているからです。

そのため、3のあとにUpdateメソッドを呼んでも、2の内容はDB上のテーブルに反映されません。

上記では追加の例をあげましたが、変更/削除の時も同じです。
追加/変更/削除したのにUpdateメソッドを実行してもテーブルに反映されない・・・といったときは
Fill行った後にデータの追加/削除/変更を行ってから
同じDataSetに対して新たにFillを行ってないか、確認してみてはいかがでしょうか。

カテゴリー: プログラミング   タグ: ,   この投稿のパーマリンク

コメントは受け付けていません。