前述の「CommandBuilderを利用して取得したデータを更新する。」では単一テーブル以外は
SqlCommandを自動生成してくれません。
なのでテーブル結合や副問い合わせでデータを取得した場合はDataAdapterのInsertCommand,
UpdateCommandおよびDeleteCommandを設定しておきデータの変更後にデータベースを更新します。
- DataAdapterのSelectCommanを設定する。
- 更新用SqlCommandにインスタンスを設定する。
- 更新用SqlCommandのConnectionを設定する。
- 更新用SqlCommandのCommandTextにSQL文を設定する。
- DataAdapter.Fillメソッドを実行しデータを取得する。
- データを変更する。
- DataAdaspter.Updateメソッドを実行しデータベースを更新する。
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()
'SqlDataAdapter
Dim da As New SqlDataAdapter()
'SelectComman設定
da.SelectCommand = New SqlCommand
da.SelectCommand.Connection = con
da.SelectCommand.CommandText = "SELECT NO, T_SALES.ITEM_CD AS ITEM_CD, ITEM_NM, PRICE, UNIT_SALES, SALES_AMOUNT " _
+ "FROM M_ITEM INNER JOIN T_SALES ON M_ITEM.ITEM_CD = T_SALES.ITEM_CD"
'InsertCommand設定
da.InsertCommand = New SqlCommand
da.InsertCommand.Connection = con
da.InsertCommand.CommandText = "INSERT INTO T_SALES(ITEM_CD, UNIT_SALES, SALES_AMOUNT) VALUES (@ITEM_CD, @UNIT_SALES, @SALES_AMOUNT)"
'パラメータ設定
da.InsertCommand.Parameters.Add("@ITEM_CD", SqlDbType.NVarChar, 4, "ITEM_CD")
da.InsertCommand.Parameters.Add("@UNIT_SALES", SqlDbType.Decimal, 8, "UNIT_SALES")
da.InsertCommand.Parameters.Add("@SALES_AMOUNT", SqlDbType.Decimal, 8, "SALES_AMOUNT")
'UpdateCommand設定
da.UpdateCommand = New SqlCommand
da.UpdateCommand.Connection = con
da.UpdateCommand.CommandText = "UPDATE T_SALES SET ITEM_CD = @ITEM_CD, UNIT_SALES = @UNIT_SALES, SALES_AMOUNT = @SALES_AMOUNT WHERE NO = @NO"
'パラメータ設定
da.UpdateCommand.Parameters.Add("@ITEM_CD", SqlDbType.NVarChar, 4, "ITEM_CD")
da.UpdateCommand.Parameters.Add("@UNIT_SALES", SqlDbType.Decimal, 8, "UNIT_SALES")
da.UpdateCommand.Parameters.Add("@SALES_AMOUNT", SqlDbType.Decimal, 8, "SALES_AMOUNT")
da.UpdateCommand.Parameters.Add("@NO", SqlDbType.Decimal, 8, "NO")
'DeleteCommand設定
da.DeleteCommand = New SqlCommand
da.DeleteCommand.Connection = con
da.DeleteCommand.CommandText = "DELETE FROM T_SALES WHERE NO = @NO"
'パラメータ設定
da.DeleteCommand.Parameters.Add("@NO", SqlDbType.Decimal, 8, "NO")
'DataSet
Dim ds As New DataSet
'データを取得
da.Fill(ds, "T_SALES")
'テーブルを取得
Dim dt As DataTable = ds.Tables("T_SALES")
'レコード追加
Dim nr As DataRow = dt.NewRow
nr("ITEM_CD") = "002"
nr("UNIT_SALES") = 500
nr("SALES_AMOUNT") = 100000
dt.Rows.Add(nr)
'レコード変更
dt.Rows(3)("UNIT_SALES") = 200
dt.Rows(3)("SALES_AMOUNT") = 60000
'レコード削除
dt.Rows(5).Delete()
'データ更新
da.Update(ds, "T_SALES")
'SqlDataAdapterの解放
da.Dispose()
'接続を閉じる
con.Close()
'SqlConnctionの解放
con.Dispose()
Console.WriteLine("データを更新しました")
End Sub
End Module
![]() |
| 実行結果 |



0 件のコメント:
コメントを投稿