3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

(ADO.Net)TableAdapter.Update を使っての新規レコードを追加でハマった

TableAdapter.Update を使えば簡単に新規レコードが追加できるんですが、はまってしまいました。

今までは更新前にDBのテーブルデータを DataTable として取得し、それに新しい DataRow を追加して、TableAdapter.Update(DataTable) を使って更新してたんですが、この方法だとオーバーヘッドが多すぎで効率的じゃありません。

MSDNみてると TableAdapter.Update(DataRow) ってのもあったんで、これだったらいけると思ってコーディングしてみました。

DataSetはこんな感じです。

コードはこんな感じです。

DataSet1TableAdapters.ProductsTableAdapter adp = new DataSet1TableAdapters.ProductsTableAdapter();

DataSet1.ProductsDataTable tbl = new DataSet1.ProductsDataTable();

DataSet1.ProductsRow row = tbl.NewProductsRow();

row.ProductID = "aaa";

//テーブル更新

adp.Update(row);

これで実行してみましたが、DBに新規レコードができません。

あれっ?と思って、MSDN:方法 : データベースに新しいレコードを挿入するを眺めていると、DataTable に追加しないとダメなようです。

ということで、下記のようにしてみました。

DataSet1TableAdapters.ProductsTableAdapter adp = new DataSet1TableAdapters.ProductsTableAdapter();

DataSet1.ProductsDataTable tbl = new DataSet1.ProductsDataTable();

DataSet1.ProductsRow row = tbl.NewProductsRow();

row.ProductID = "aaa";

tbl.AddProductsRow(row);

//テーブル更新

adp.Update(row);

空であってもなくてもいったん DataTable にDataRow を追加してからでないと、TableAdapter.Update(DataRow) で更新しても挿入はしてくれないみたいですね。

コンパイルエラーも何も出ないので、気を付けてコーディングしないと見落としそうです。