<< [MSUPD] 2006-12 更新情報 | main | [Web] IEにおけるPNG画像の透過 >>

2006/12/21 (木)

[ADO.NET] データ操作の使える新機能

○フィルターをかけたDataViewの結果セットだけをDataTableに変換
 Dim dv As DataView = new DataView(dt)
 dv.RowFilter = "条件"
 
 Dim dtFilter As DataTable = dv.ToTable()

 ※指定したカラムだけを抽出することも可能
 dt2 = dv.ToTable("Table1", New String() {"Column1", "Column2"})


○SQLのSELECT DISTINCTに相当する機能
 Dim dv As DataView = new DataView(dt)
①Dim dt As DataTable = dv.DefaultView.ToTable(True,"Column1")

 ※「SELECT DISTINCT Column1 FROM AnyTable」に相当

②Dim dt As DataTable = dv.DefaultView.ToTable(True,"Column1","Column2")

 ※「SELECT DISTINCT Column1,Column2 FROM AnyTable」に相当


○1.xではDataSetにしかなかったが、2.0でDataTable単体でも可能になった機能
 ReadXML
 ReadXMLSchema
 WriteXML
 WriteXMLSchema


○DataReaderから一括読込
 1.xではDataReaderでデータベースから読み込んだ場合、ループさせてデータを読み取っていたが
 Loadメソッドにより一括読込可能になった。

 Dim cmd As New SqlCommand("Select文",conn)
 Dim reader As New SqlDataReader
 reader = cmd.ExecuteReader()
 If reader.Read() Then
  …
  1行ずつ読みながらDataTableに書き込んだりする
  …
 End If
 ↓
 dt.Load(reader, LoadOption.OverwriteRow) ←1行で済む


○DataSetやDataTableに対してDataTableReaderオブジェクトが取得できるようになった
 (元DataTableの削除行を除いた現在の値だけが含まれる結果セット)

 Dim dtr As DataTableReader = dt.GetDataReader

 ※DataTableをコピーする場合
  Dim dt2 As New DataTable
  dt2.Load(dt.GetDataReader)