データベースの更新についてご指導下さい。
VB2010からSQLサーバーのデータベースに接続しております。
dataAdapter.Updateによりデータベースを更新する際の
パラメーターへ値をセットする方法を教えて下さい。
テーブル名Test
Code Name
------------
A Suzuki
希望する処理
テキストボックスに入力された名前に変更
例) Suzuki → Yamada
○フォームの変数として定義
Dim dataAdapter As New SqlDataAdapter
Dim dataSet As New DataSet
○FormLoad時にSelectCommandとUpdateCommandを設定
Dim SQL As String = ""
Dim command As SqlCommand
Dim connection As SqlConnection = New SqlConnection(~)
SQL = "SELECT * FROM Test WHERE Code = @code "
command = New SqlCommand(SQL, connection)
dataAdapter.SelectCommand = command
dataAdapter.SelectCommand.Parameters.Add("@code", SqlDbType.Char)
SQL = "UPDATE Test SET Name = @name WHERE Code = @code"
command = New SqlCommand(SQL, connection)
dataAdapter.UpdateCommand = command
dataAdapter.UpdateCommand.Parameters.Add("@code", SqlDbType.Char)
dataAdapter.UpdateCommand.Parameters.Add("@name", SqlDbType.Text, 50)
○データ表示時にはこれで表示されました。
dataAdapter.SelectCommand.Parameters.Item("@code").Value = ComboBoxCode.text
dataAdapter.Fill(dataSet)
○このSelectCommandを参考にこのように書いて見たのですが更新されません。
dataAdapter.UpdateCommand.Parameters.Item("@code").Value = ComboBoxCode.Text
dataAdapter.UpdateCommand.Parameters.Item("@name").Value = TextBoxName.Text
dataAdapter.Update(dataSet)
どのようにしたら実行時にパラメーター化したところへデータをセットできるのでしょうか?
データセットに値が入っていないのでは?と予想したのですが…。
shockatz様、ご回答ありがとうございます。
ご指摘頂きました、datasetにデータを入れてみました。
○DataRowを更新,Updateを行うことで更新が確認されました。
For Each dr As DataRow In dataSet.Tables(0).Rows
dr("Name") = TextBoxName.Text
dataAdapter.Update(dataSet)
Next
○またこちらの方法でも更新が確認出来ました。
dataSet.Tables(0).Rows(0).Item("Name") = TextBoxName.Text
dataAdapter.Update(dataSet)
ありがとうございます。
しかし私の書き方ではパラメーターがどこかに行ってしまいました(汗)
お礼
shockatz様、ご回答ありがとうございます。 今まではDataGridViewを使って一括更新しておりました。 1レコ単位の場合は直接SQLを実行しておりました。 そこで、1レコ単位の処理もパラメーターを使えるのでは?と勘違いした次第です。 私の勉強不足です。ご指導ありがとうございます。