- C++相談室 part124 [無断転載禁止]©2ch.net
164 :tasuketekesuta (ワッチョイ d3d5-j49k)[]:2016/04/19(火) 21:50:00.65 ID:spYNmTFF0 - DataSet/DataAdapterの仕様についてご教授下さい。
■DataSet/DataAdapterの仕様 DataAdapter には、SELECT、UPDATE、INSERT、DELETEのSQL文が設定できます。 Fillメソッドを実行するとSELECTのSQL文の基づいてDataSetにデータを読み込みます。このときDataSetの各行には「編集なし」のマークがついています。 値を更新するとそのマークが「更新済」、削除すると「削除済」、データを追加すると「追加済」のマークに変わります。 Updateメソッドを実行すると、DataSetの各行のマークに応じて、設定してあるUPDATE、INSERT、DELETEのSQL文を実行します。
|
- C++相談室 part124 [無断転載禁止]©2ch.net
165 :tasuketekesuta (ワッチョイ d3d5-j49k)[]:2016/04/19(火) 21:51:02.12 ID:spYNmTFF0 - >>164 の続き
■実施したい事【概要】 DataAdapterのFillメソッドで取得したDataSet内のDataTableに対して、 挿入/更新操作をかけていき、全ての処理が終わったら、UPDATEを行う。 その際、DataTableに挿入した順番でDBへの挿入SQLが流れてほしい。
|
- C++相談室 part124 [無断転載禁止]©2ch.net
166 :tasuketekesuta (ワッチョイ d3d5-j49k)[]:2016/04/19(火) 21:51:29.36 ID:spYNmTFF0 - ■実施したい事【詳細】
DataTable^ tbl;//←DataAdapterのFillメソッドで取得したDataSet内のDataTableだとします while(10000行程度ループ){ DataRow^ tg_row = tbl->Rows->Find(ループ毎に変わる値); if( static_cast<DataRow^>(tg_row)==nullptr){ DataRow^ row = tbl->NewRow(); row["hogehoge"] = ループ毎に変わる値; tbl->Rows->Add(row);//←★★★★★★初期挿入★★★★★★★ } else{ row["hogehoge"] = ループ毎に変わる値; } } 上記のソースで5000行のレコードが出来たと仮定します。 ※つまり"ループ毎に変わる値"の重複が半分あったということ この状態でUPDATEを行うと、 なぜか、初期挿入した順番通りにinsert文が発行されません。 ※DB上で見ると順番がごちゃまぜです
|
- C++相談室 part124 [無断転載禁止]©2ch.net
167 :デフォルトの名無しさん (ワッチョイ d3d5-j49k)[]:2016/04/19(火) 21:52:10.39 ID:spYNmTFF0 - >>164 の続き
■質問@ なぜ、初期挿入した順番通りにinsert文が発行されないのでしょうか? tbl->Rows->Findで取得したレコードの値を変更すると順番が変更になってしまうのでしょうか? ■質問A 初期挿入した順番にinsert文が発行されようにするには、 どの様にしたら良いでしょうか? 解決策をご教授下さい。
|