2017/03/05

[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)です)。

Uers_2

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

Uers2


スポンサーリンク


このエントリーをはてなブックマークに追加




Twitter ではブログにはない、いろんな情報を発信しています。


コメント

コメントを書く



プロフィール

  • 名前:fnya
    経歴:
    SE としての経験は15年以上。様々な言語と環境で業務系システム開発を行い、セキュリティ対策などもしていました。現在は趣味SE。

    Twitter では、ブログでは取り上げない情報も公開しています。


    ブログについて

    このブログは、IT、スマートフォン、タブレット、システム開発などに関するさまざまな話題を取り上げたり、雑感などをつづっています。

    現在、Enty で支援を受け付けています。もしよければご支援ください。



    >>ブログ詳細
    >>自作ツール
    >>運営サイト
    >>Windows 10 まとめ

    Twitter のフォローはこちらから Facebook ページはこちら Google+ページはこちら RSSフィードのご登録はこちらから