こんにちは。
けいぞうです。
今回は「PowerShellでSQLServerのDB操作をする方法」の【クエリ実行編】の記事です。
SELECT文の実行方法
まずはSELECT文を実行する際のサンプルスクリプトになります。
# 接続文字列の作成
$ConnectionString = New-Object -TypeName System.Data.SqlClient.SqlConnectionStringBuilder
$ConnectionString['Data Source'] = "【インスタンス名】"
$ConnectionString['Initial Catalog'] = "【データベース名】"
$ConnectionString['Integrated Security'] = "TRUE"
# SELECT文の作成
$SQLQuery = "SELECT * FROM [dbo].[【テーブル名】]"
# 結果格納用のDataTableを作成
$resultsDataTable = New-Object System.Data.DataTable
# SQLConnectionとSQLCommandを設定する
$SqlConnection = New-Object System.Data.SQLClient.SQLConnection($ConnectionString)
$SqlCommand = New-Object System.Data.SQLClient.SQLCommand($SQLQuery, $SqlConnection)
# データベース接続
$SqlConnection.Open()
# ExecuteReaderを実行してDataTableにデータを格納
$resultsDataTable.Load($SqlCommand.ExecuteReader())
# データベース接続解除
$SqlConnection.Close()
# 画面表示
$resultsDataTable
1~5行目は接続情報の作成部分になります。
5行目のIntegrated Securityとは、Windows統合認証のことです。今端末にログインしているユーザーでDBにアクセスするということですね。
このWindows統合認証を使う場合は、この値をTRUEに設定します。
8行名は普通のSQLクエリ、11行目は結果格納用のDataTableの用意です。
14行目はSqlConnectionオブジェクトの作成です。このオブジェクトは、データベースへ接続したり、接続を解除したりするために使います。
15行目は、SqlCommandオブジェクトの作成です。このオブジェクトは、実行するコマンドのオブジェクトです。8行目で作成したクエリをこのオブジェクトに渡してあげて、実行用のオブジェクトが作られます。
18行目が接続開始、24行目が接続解除です。
21行目でクエリの実施と、DataTableへの格納を行っています。
DataTableへコマンド実行結果を渡すには、Load関数を使います。
Load関数には、SqlCommandのExecuteReader()の実行結果を渡します。
INSERT文の実行方法
INSERT文を実行する際のサンプルスクリプトは以下になります。
# 接続文字列の作成
$ConnectionString = New-Object -TypeName System.Data.SqlClient.SqlConnectionStringBuilder
$ConnectionString['Data Source'] = "【インスタンス名】"
$ConnectionString['Initial Catalog'] = "【データベース名】"
$ConnectionString['Integrated Security'] = "TRUE"
# INSERT文の作成
$SQLQuery = "INSERT INTO [dbo].[Curry_Menu] VALUES(N'エビカツカレー',N'タルタルソース',N'300',N'3')"
# SQLConnectionとSQLCommandを設定する
$SqlConnection = New-Object System.Data.SQLClient.SQLConnection($ConnectionString)
$SqlCommand = New-Object System.Data.SQLClient.SQLCommand($SQLQuery, $SqlConnection)
# データベース接続
$SqlConnection.Open()
# INSERT文の実行
$SqlCommand.ExecuteNonQuery()
# データベース接続解除
$SqlConnection.Close()
SELECT文と異なる箇所は1か所のみです。
21行目の実行時の関数が異なり、INSERT文実行時は
ExecuteNonQuery()を使用します。
このメソッドの戻り値はINSERTした行数になります。
UPDATE文の実行方法
UPDATE文を実行する際のサンプルスクリプトは以下になります。
# 接続文字列の作成
$ConnectionString = New-Object -TypeName System.Data.SqlClient.SqlConnectionStringBuilder
$ConnectionString['Data Source'] = "【インスタンス名】"
$ConnectionString['Initial Catalog'] = "【データベース名】"
$ConnectionString['Integrated Security'] = "TRUE"
# UPDATE文の作成
$SQLQuery = "UPDATE [dbo].[Curry_Menu] SET Hotness = N'99' WHERE Name = N'ハンバーグカレー'"
# SQLConnectionとSQLCommandを設定する
$SqlConnection = New-Object System.Data.SQLClient.SQLConnection($ConnectionString)
$SqlCommand = New-Object System.Data.SQLClient.SQLCommand($SQLQuery, $SqlConnection)
# データベース接続
$SqlConnection.Open()
# UPDATE文の実行
$SqlCommand.ExecuteNonQuery()
# データベース接続解除
$SqlConnection.Close()
こちらもINSERT文と同様で
ExecuteNonQuery()でクエリを実行します。
戻り値はUPDATEした件数になります。
DELETE文の実行方法
DELETE文を実行する際のサンプルスクリプトは以下になります。
# 接続文字列の作成
$ConnectionString = New-Object -TypeName System.Data.SqlClient.SqlConnectionStringBuilder
$ConnectionString['Data Source'] = "【インスタンス名】"
$ConnectionString['Initial Catalog'] = "【データベース名】"
$ConnectionString['Integrated Security'] = "TRUE"
# DELETE文の作成
$SQLQuery = "DELETE FROM [dbo].[Curry_Menu] WHERE Name = N'エビカツカレー'"
# SQLConnectionとSQLCommandを設定する
$SqlConnection = New-Object System.Data.SQLClient.SQLConnection($ConnectionString)
$SqlCommand = New-Object System.Data.SQLClient.SQLCommand($SQLQuery, $SqlConnection)
# データベース接続
$SqlConnection.Open()
# UPDATE文の実行
$SqlCommand.ExecuteNonQuery()
# データベース接続解除
$SqlConnection.Close()
こちらもINSERT文およびUPDATE文と同様に
ExecuteNonQuery()でクエリを実行します。
戻り値はDELETEした件数になります。
まとめ
SELECT文の実行は、結果格納用のDataTableを用意して
そのDataTableのLoad関数に、コマンドの実行結果を渡します。
コマンドの実行は「ExecuteReader()」を使用します。
また、INSERT文、UPDATE文、DELETE文の実行は
ExecuteNonQuery()を使用します。
この戻り値は、それぞれ「INSERTした件数」「UPDATEした件数」「DELETEした件数」となります。
最近のコメント