データベースの更新についてご指導下さい。
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Listviewのデータを上から順番...
-
電話番号の探索アルゴリズム
-
【Excel VBA】先頭の「0」飛び...
-
アナログレコードをキャプチャ...
-
エクセルVBA、数式の入ったセル...
-
C# データ配列から画像を作成す...
-
VBA ユーザーフォーム ボタンク...
-
screenupdatingが機能しなくて...
-
Excelで指定した日付から過去の...
-
Accessのクエリで、replace関数...
-
特定のセルが空白だったら、そ...
-
Excel VBAのリストボックスの値...
-
i=cells(Rows.Count, 1)とi=cel...
-
VBA listBoxについて
-
ExcelVBAを使って、値...
-
array関数で格納した配列の型を...
-
Excelのハイパーリンクにマクロ...
-
スプレッドシートをGASでセル保...
-
ハイフン(-)が長音(ー)
-
For Nextマクロの高速化につい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【Excel VBA】先頭の「0」飛び...
-
DataGrdViewに関連付けたデータ...
-
Listviewのデータを上から順番...
-
GASでスプレッドシートの一番上...
-
VBAでページ番号、ページ最終行...
-
.NET SqlDataReader のレコー...
-
GridViewにバインドせずにデー...
-
【ASP.NET MVC】一覧編集画面
-
ASP C# データベースから1行取得
-
MSFlexGridのデータ表示位置の設定
-
コンパイルエラーSubまたは...
-
C# データ配列から画像を作成す...
-
エクセルマクロ小数点桁数
-
DataGridViewで表示に制限をつ...
-
スプレッドシート 一括でQRコー...
-
GridViewを自動的にスクロール...
-
DBへの重複更新を防ぐ方法について
-
エクセルVBA、数式の入ったセル...
-
GoogleEarthのKMLファイルでラ...
-
VB DataRepeaterにて条件で表示
おすすめ情報