PowerShell から .NET Framework のライブラリを呼び出して、ADO.NET のトランザクションを使用して SQL Server のデータベースにデータを追加するサンプルを提示します。
SQL Server は SQL Server 2016 Express Edition になります。
対象となる SQL Server のテーブルは Test データベースの USERS テーブルです。テーブルイメージは以下のようになります(ID、NAME ともの型は NVARCHAR(50)です)。
PowerShell のソースコードは以下のようになります。
# # PowerShell から ADO.NET でトランザクションを使用して SQL Serverにデータ追加する # # 接続文字列の宣言 $connectionString = "Server=localhost\SQLEXPRESS;Database=Test;Integrated Security=SSPI;" # データベースの接続を宣言 $con = New-Object -TypeName System.Data.SqlClient.SqlConnection $connectionString try { # 接続をオープン $con.Open() # トランザクションを開始する $transaction = $con.BeginTransaction() # 名前付きパラメータ付き SQL を宣言 $sql = "INSERT INTO USERS (ID, NAME) VALUES (@ID, @NAME)" # コマンドを宣言 $command = New-Object -TypeName System.Data.SqlClient.SqlCommand $command.Connection = $con $command.Transaction = $transaction $command.CommandText = $sql # コマンドにパラメータの値を設定 [void]$command.Parameters.AddWithValue("@ID","004") [void]$command.Parameters.AddWithValue("@NAME","菊池三郎") #SQL を実行する [void]$command.ExecuteNonQuery() # コミットしてトランザクションを終了する $transaction.Commit() } catch { # エラー内容を出力する Write-Host $Error[0].Exception.Message # ロールバックしてトランザクションを終了する $transaction.Rollback() } finally { # 接続を閉じる $con.Close() }
正常終了時は以下のようになりますので、問題ありませんね。例外が発生するケースを試したい場合は、例外を throw する一文を追加してみてください。