前述の「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 件のコメント:
コメントを投稿