PowerShell, SQLServer データベースにADO.NETのトランザクションを使用してデータ追加する


PowerShell から .NET Framework のライブラリを呼び出して、ADO.NET のトランザクションを使用して SQL Server のデータベースにデータを追加するサンプルを提示します。

SQL Server は SQL Server 2016 Express Edition になります。

対象となる SQL Server のテーブルは Test データベースの USERS テーブルです。テーブルイメージは以下のようになります(ID、NAME ともの型は NVARCHAR(50)です)。

f:id:fnyablog:20180908193632j:plain

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 する一文を追加してみてください。

f:id:fnyablog:20180908193750j:plain