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) で更新しても挿入はしてくれないみたいですね。
コンパイルエラーも何も出ないので、気を付けてコーディングしないと見落としそうです。