
データベースの更新についてご指導下さい。
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)
どのようにしたら実行時にパラメーター化したところへデータをセットできるのでしょうか?
データセットに値が入っていないのでは?と予想したのですが…。
No.2ベストアンサー
- 回答日時:
DataAdapterやTableAdapterを使った更新だと、@parameterはまず使わないのでは?
ていうか、そのためのDataTableではないかと。
DataTableは自分の各Rowの状態をRowStateとして記憶してるんで。
どうしても項目列を部分的に書き直したい場合は、DataAdapterでなく、SQLCommand使う。
1レコ単位じゃなくて一括更新する場合なんかもそのように。
shockatz様、ご回答ありがとうございます。
今まではDataGridViewを使って一括更新しておりました。
1レコ単位の場合は直接SQLを実行しておりました。
そこで、1レコ単位の処理もパラメーターを使えるのでは?と勘違いした次第です。
私の勉強不足です。ご指導ありがとうございます。
No.1
- 回答日時:
DataAdapterの挙動に誤解があります。
DataAdapterの更新機能は、指定したテーブルの行データ内容が変更されている場合、追加されている場合、削除されている場合を自動的に判定し、Update一発で自動更新を行うための、高度に抽象化されたDAO(データアクセスオブジェクト)です。
なので、dataSet内のDataTable/DataRowデータを更新し、dataAdapter.Update(dataTable)すれば自動的に更新されます。
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)
ありがとうございます。
しかし私の書き方ではパラメーターがどこかに行ってしまいました(汗)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
.NET SqlDataReader のレコー...
-
ADO.NETのデータベースについて
-
VBA ピボットテーブル自動更新
-
【Excel VBA】先頭の「0」飛び...
-
GASでスプレッドシートの一番上...
-
【ASP.NET MVC】一覧編集画面
-
VBAでページ番号、ページ最終行...
-
ACCESSのVBAで[Split]について
-
Listviewのデータを上から順番...
-
DataGridViewで表示に制限をつ...
-
DataGrdViewに関連付けたデータ...
-
コンボボックス
-
GridViewにバインドせずにデー...
-
yahoo天気の過去1ヶ月分のデー...
-
C# MySQLのデータを個別に取得...
-
VB.net CrystalReportでプロジ...
-
C# データ配列から画像を作成す...
-
ListViewで条件によって表示を...
-
PDFメニューバーの右端にある(...
-
Accessのクエリで、replace関数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DataGrdViewに関連付けたデータ...
-
【Excel VBA】先頭の「0」飛び...
-
.NET SqlDataReader のレコー...
-
GASでスプレッドシートの一番上...
-
Listviewのデータを上から順番...
-
VBAでページ番号、ページ最終行...
-
MSFlexGridのデータ表示位置の設定
-
GridViewにバインドせずにデー...
-
DataGridViewで表示に制限をつ...
-
【ASP.NET MVC】一覧編集画面
-
VBA ピボットテーブル自動更新
-
ASP C# データベースから1行取得
-
エクセルマクロ小数点桁数
-
GoogleスプレッドシートからExc...
-
VB.net CrystalReportでプロジ...
-
ListViewで条件によって表示を...
-
PHP+CSVを使った一覧表示&詳細...
-
VBによる可変長ファイルの読み書き
-
ACCESSのVBAで[Split]について
-
コンパイルエラーSubまたは...
おすすめ情報