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

既に値がセットされているDataSetに列を新規で追加

環境/言語:[WINDOWSXP VB.NET ADO.NET]
分類:[.NET]

始めまして、いつも拝見させていただいております。
Luckと申します。

現在OleDbDataAdapterのFillメソッドを利用して
DataSetに取得した内容が格納されております。
---->
Adapter= New System.Data.OleDb.OleDbDataAdapter(("SELECT * FROM AAA", oleCon)
Adapter.Fill(Dataset, 0, STRDTLCNT, "W_HATTYU")
<----

テーブルAAAに発行したクエリが出力した内容がDataSetに入っております。

このDataSetに新たに列を追加したいのですが、
なかなか解決策が見つかりません。

皆様のお知恵をお借りできないでしょうか
また、何かヒントがあればご教授願います。
よろしくお願いします。

テーブル:AAA
|Column1|Column2|Column3|
|a1 |b1 |c1 |
|a2 |b2 |c2 |
|a3 |b3 |c3 |

をデータセットにセットし、

データセット:Dataset
|Column1|Column2|Column3|
|a1 |b1 |c1 |
|a2 |b2 |c2 |
|a3 |b3 |c3 |

ソースから列を追加したい

新たなデータセット:Dataset
|Column1|Column2|Column3|NewColumn
|a1 |b1 |c1 |D1
|a2 |b2 |c2 |D2
|a3 |b3 |c3 |D3
■No9782に返信(LUCKさんの記事)
お疲れ様です。HSD所属のbettaです。

DataTableオブジェクトの
ImportRow・LoadDataRow・NewRowメソッド
を調べてみてください。
> DataTableオブジェクトの
> ImportRow・LoadDataRow・NewRowメソッド
> を調べてみてください。
追加したいのは、値が入っていない部分の列の内容であって、
行ではないので、この場合、関係ないと思いますが。

質問の意図は、
読み込み済みのデータに、新しく追加した列の分の値を各行に割り付けたい(合成したい)
が簡単にできないか、ってことではないですか?

●Datatableを書き換えしてなくて行状態がリセットされてもよいのであれば、
単にFillしてください。
他の方法を採る意味は、(滅多に)ないです。
もちろん、Datatableにキーを設定してあれば、クリアはしなくていいです。


●それまで一生懸命編集した内容を維持したいのであれば、根性です。

同じ条件で比較用のキーの列と追加したい値の列を別の仮DatatableにFillして、
地道にFor each rowでループしながらキーで一致したRowに代入していくしか
ないのかな、と思います。
※両方のDatatableにきちんと主キーを付けてあるのが前提です。
例えばキーが二つだとして・・・
tmpTable_forAppendNewColValue:比較用のキーと追加したい項目だけのDatatable
orgTable:新しい列の定義だけを追加済みの元のDatatable

For Each rw_forAppend As DataRow In _
tmpTable_forAppendNewColValue.Select("", "", DataViewRowState.CurrentRows)
    Dim orgrw As DataRow = _
    orgTable.Rows.Find(New Object() {rw_forAppend("col1_k"), rw_forAppend("col2_k")})
    If Not (orgrw Is Nothing) Then
        orgrw("newcol1") = rw_forAppend("newcol1")
    End If
Next
みたいな?
DataViewRowState.CurrentRowsにしたのは、削除(予定)のは、いいや、と思ったからです。
全部やるならSELECTでなくてRowsと書けば良いです。


※埋めるためのSQLは、キー列群と増える列の分だけにしてください。メモリの無駄です。
また、終わったらすぐDispose。邪魔なので。


なお、全ての行が「Modified」になりますので、行ステートでDB更新処理を
振り分けているのであれば、更新実行時にUpdateばかりが大量に発生しますからご注意を・・・。
■No9819に返信(こど。さんの記事)
お疲れ様です。HSD所属のbettaです。

> > DataTableオブジェクトの
>>ImportRow・LoadDataRow・NewRowメソッド
>>を調べてみてください。
> 追加したいのは、値が入っていない部分の列の内容であって、
> 行ではないので、この場合、関係ないと思いますが。
あう、申し訳ありません、ぼけてました。

単純に列を追加したいなら、
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconaddingdatacolumnstodatatable.asp
っていうのがありました。

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