アプリ版:「スタンプのみでお礼する」機能のリリースについて

データベースの更新についてご指導下さい。
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)

どのようにしたら実行時にパラメーター化したところへデータをセットできるのでしょうか?
データセットに値が入っていないのでは?と予想したのですが…。

A 回答 (2件)

DataAdapterやTableAdapterを使った更新だと、@parameterはまず使わないのでは?


ていうか、そのためのDataTableではないかと。
DataTableは自分の各Rowの状態をRowStateとして記憶してるんで。

どうしても項目列を部分的に書き直したい場合は、DataAdapterでなく、SQLCommand使う。
1レコ単位じゃなくて一括更新する場合なんかもそのように。
    • good
    • 0
この回答へのお礼

shockatz様、ご回答ありがとうございます。

今まではDataGridViewを使って一括更新しておりました。
1レコ単位の場合は直接SQLを実行しておりました。

そこで、1レコ単位の処理もパラメーターを使えるのでは?と勘違いした次第です。
私の勉強不足です。ご指導ありがとうございます。

お礼日時:2012/09/19 11:11

DataAdapterの挙動に誤解があります。



DataAdapterの更新機能は、指定したテーブルの行データ内容が変更されている場合、追加されている場合、削除されている場合を自動的に判定し、Update一発で自動更新を行うための、高度に抽象化されたDAO(データアクセスオブジェクト)です。
なので、dataSet内のDataTable/DataRowデータを更新し、dataAdapter.Update(dataTable)すれば自動的に更新されます。
    • good
    • 0
この回答へのお礼

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)

ありがとうございます。
しかし私の書き方ではパラメーターがどこかに行ってしまいました(汗)

お礼日時:2012/09/19 00:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!