2014年1月2日木曜日

【VB.NET】ADO.NET DataAadpterで取得したデータをCommandBuilderを利用して更新する。

CommandBuilderを利用してDataAdapterのSelectCommandからInsertCommand、UpdateCommandおよびDeleteCommandを生成し、DataAdapter.Updateメソッドを実行し
データベースのデータを更新します。
  1. DataAdapterでデータを取得します。
  2. CommandBuilderのインスタンスを作成します。
  3. 取得したデータを変更します。
  4. DataAdapter.Updateメソッドを実行しデータベースのデータを更新します。
(注意)
CommandBuilderがSqlCommandを自動生成するのはDataAdapterのSelectCommandが
単一テーブルで1つの主キーまたは一意のデータを返す場合に限られます。    

使用例:売上データを取得しデータを変更した後にデータベースのデータを更新します。

テーブル定義
インスタンス名SQLEXPRESSデータベース名SAMPLE_DB
論理テーブル名売上データ物理テーブル名T_SALES
列定義
No論理名物理名データ型Nullを許容主キー
1NONOnumeric(8,0)NoYes
2商品CDITEM_CDnvarchar(4)No
3売上数UNIT_SALESnumeric(8,0)No
4売上額SALES_AMOUNTnumeric(8,0)No

売上データ











Imports System.Data.SqlClient
 
Module Module1
 
    Sub Main()
        Dim con As New SqlConnection
 
        'DB接続
        con.ConnectionString = "Data Source=localhost\SQLEXPRESS;Initial Catalog=SAMPLE_DB;Integrated Security=True"
        con.Open()
 
        'SQLステートメント
        Dim strSql As String = "SELECT * FROM T_SALES"
 
        'SqlDataAdapter設定
        Dim da As New SqlDataAdapter(strSql, con)
 
        'DataSet
        Dim ds As New DataSet
 
        'データを取得
        da.Fill(ds, "T_SALES")
 
        'SqlCommandBuilder設定
        Dim scBuilder As New SqlCommandBuilder(da)
 
        'テーブル取得
        Dim dt As DataTable = ds.Tables("T_SALES")
 
        'レコード追加
        Dim nr As DataRow = dt.NewRow
        nr("ITEM_CD") = "003"
        nr("UNIT_SALES") = 100
        nr("SALES_AMOUNT") = 30000
        dt.Rows.Add(nr)
 
        'レコード変更
        dt.Rows(2)("UNIT_SALES") = 80
        dt.Rows(2)("SALES_AMOUNT") = 16000
 
        'レコード削除
        dt.Rows(6).Delete()
 
        'データ更新
        da.Update(ds, "T_SALES")
 
        'SqlDataAdapterの解放
        da.Dispose()
 
        '接続を閉じる
        con.Close()
 
        'SqlConnctionの解放
        con.Dispose()
 
        Console.WriteLine("データを更新しました")
    End Sub
 
End Module
実行結果

0 件のコメント:

コメントを投稿