VB.NETとSQLServerでデータ更新するサンプルと説明です。
| 確認環境 ・Microsoft Visual Studio Community 2019 ・SQL Server 2019 Express Edition | 
目次
| サンプル | insertのサンプル | 
| 説明 | バインド変数 | 
| Connectionクラスのインスタンスを生成 | |
| 接続とトランザクションの開始 | |
| Commandクラスのインスタンスを生成 | |
| CommandクラスのParametersプロパティに値をセット | |
| SQLの実行とコミット | |
| 例外のCatchとロールバック | |
| updateの場合 | |
| deleteの場合 | |
| サンプル | 更新のsqlを複数回実行する例 | 
insertのサンプル
SQLServerに接続してインサートを実行するサンプルです。Windows認証です。
Imports System.Data.SqlClient
Module Module1
	Sub Main()
		Dim Sql As String _
			= "insert into syain (id,name,romaji) VALUES (@ID,@name,@romaji)"
		Try
			Using Conn As New SqlConnection
				Conn.ConnectionString =
				   ("Data Source=localhost\SQLEXPRESS;" &
					"Initial Catalog=testDB1;" &
					"Integrated Security=SSPI;")
				Conn.Open()
				Using transaction As SqlTransaction = Conn.BeginTransaction()
					Try
						Using cmd As New SqlCommand(Sql, Conn, transaction)
							cmd.Parameters.Add(New SqlParameter(
								"@ID", SqlDbType.Int)).Value = 5
							cmd.Parameters.Add(New SqlParameter(
								"@name", SqlDbType.VarChar)).Value = "高橋"
							cmd.Parameters.Add(New SqlParameter(
								"@romaji", SqlDbType.VarChar)).Value = "takahashi"
							cmd.ExecuteNonQuery()
							transaction.Commit()
						End Using
					Catch ex As Exception
						transaction.Rollback()
						Console.WriteLine(ex.Message)
					End Try
				End Using
			End Using
		Catch ex As Exception
			Console.WriteLine(ex.Message)
		End Try
	End Sub
End Moduleバインド変数
	Dim Sql As String _
		= "insert into syain (id,name,romaji) VALUES (@ID,@name,@romaji)"5,6行目は、SQLのinsert文です。valuesにあるアットマーク(@)がついている項目はバインド変数です。パラメータで値を設定します。バインド変数は、プレースホルダとも呼ばれます。
入力される不正な文字を抑止できるのでSQLインジェクション対策になります。
固定文字列のSQLの部分がプリコンパイルされるので実行速度が上がります。
Connectionクラスのインスタンスを生成
	Using Conn As New SqlConnection
		Conn.ConnectionString =
			 ("Data Source=localhost\SQLEXPRESS;" &
			"Initial Catalog=testDB1;" &
			"Integrated Security=SSPI;")8行目は、SqlConnection のインスタンスを生成しています。Usingなので自動でcloseします。
9行目からは、インスタンスにDBへの接続情報をセットしています。testDB1はデータベース名です。
接続とトランザクションの開始
	conn.Open();
	using (SqlTransaction transaction = conn.BeginTransaction())14行目は、OpenメソッドでDBへ接続しています。
15行目は、SqlTransactionクラスのBeginTransactionメソッドでトランザクションを開始します。ここもUsingなので自動でcloseします。
変数の型はSqlTransactionクラスです。
Commandクラスのインスタンスを生成
	Try
		Using cmd As New SqlCommand(Sql, Conn, transaction)21行目のTryは、例外があったときに後述するCatchに処理が移動します。
23行目は、SqlCommandクラスのインスタンスを生成しています。コンストラクタの引数に上記のinsert文のSQLとconnとtransactionを指定しています。
CommandクラスのParametersプロパティに値をセット
	cmd.Parameters.Add(New SqlParameter(
		"@ID", SqlDbType.Int)).Value = 5
	cmd.Parameters.Add(New SqlParameter(
		"@name", SqlDbType.VarChar)).Value = "高橋"
	cmd.Parameters.Add(New SqlParameter(
		"@romaji", SqlDbType.VarChar)).Value = "takahashi"
18行目からは、SqlCommandクラスのParametersプロパティに値をセットしています。SqlParameterの引数の"ID"や”name"がSQL文のバインド変数と紐づきます。
19行目は、DBのテーブルのデータ型がint型なのでSqlDbTypeは、Intにしています。
21,23行目は、テーブルのデータ型はVARCHAR型なのでvarCharにしています。
SQLの実行とコミット
	cmd.ExecuteNonQuery()
	transaction.Commit()26行目は、SqlCommandクラスのExecuteNonQueryメソッドでSQLを実行します。
28行目は、DBでのSQLの処理が成功した場合、SqlTransactionクラスのCommitメソッドで確定されます。
ここでエラーがあった場合は、28行目は実行されず、後述のCatchに処理が移動します。
例外のCatchとロールバック
	Catch ex As Exception
		transaction.Rollback()
		Console.WriteLine(ex.Message)
	End Try30行目のCatchは16行目のtry以降の実行でエラーが発生したときに処理が行われます。
エラーをキャッチするとも言われます。
Exceptionはクラスでexは変数です。
31行目は、SqlTransactionクラスのRollbackメソッドでデータをロールバックします。更新しません。例えばinsert文を2つ発行したとして一つは成功しもう一つは失敗した場合、2つともデータ更新はしません。
updateの場合
= "update syain Set name = @name ,romaji = @romaji where id = @ID"updeteを行う場合は、6行目のSQL文を変更します。
cmd.Parametersの箇所では、キーと更新したい項目を指定します。
deleteの場合
= "delete from syain where id = @ID"deleteを行う場合は、6行目のSQL文を変更します。
cmd.Parametersの箇所では、キーを指定します。
更新のsqlを複数回実行する例
更新のsqlを複数回実行する場合は、SqlParameterCollectionクラスのClearメソッドを使用します。
	Using cmd As New SqlCommand(Sql, Conn, transaction)
		cmd.Parameters.Add(New SqlParameter(
			"@ID", SqlDbType.Int)).Value = 5
		cmd.Parameters.Add(New SqlParameter(
			"@name", SqlDbType.VarChar)).Value = "高橋"
		cmd.Parameters.Add(New SqlParameter(
			"@romaji", SqlDbType.VarChar)).Value = "takahashi"
		cmd.ExecuteNonQuery()
		cmd.Parameters.Clear()
		cmd.Parameters.Add(New SqlParameter(
			"@ID", SqlDbType.Int)).Value = 6
		cmd.Parameters.Add(New SqlParameter(
			"@name", SqlDbType.VarChar)).Value = "武田"
		cmd.Parameters.Add(New SqlParameter(
			"@romaji", SqlDbType.VarChar)).Value = "takeda"
		cmd.ExecuteNonQuery()
		transaction.Commit()
	End Using25行目は、ExecuteNonQueryメソッドで1回目の更新処理を行います。
27行目は、Clearメソッドでパラメータをクリアします。
36行目は、2回目の更新処理を行います。
38行目は、上記2つの更新処理が成功した場合にコミットします。
関連の記事
