2012/05/07

PowerShellでSqlDataReaderを使用するサンプル

PowerShellでSqlDataReaderクラスを使用して データベースから値を取得するサンプル。
#
# 名前
#     Execute-Query
# 概要
#     指定されたQueryを実行し、テキストファイルに出力します。
#
# -Query  SQL文
# -Fields 出力するColumn名
# -File   出力するテキストファイル
function Execute-Query([string]$query, $fields, $file){

 [Data.SqlClient.SqlConnection]$conn = $null
 [Data.SqlClient.SqlCommand]$cmd = $null
 [Data.SqlClient.SqlDataReader]$reader = $null
 
 $funcName = "Execute-Query"
 
 # 改行をスペースに置換
 $tmp = $query -replace "`r`n", " "
 Write-Debug  "QUERY=[$tmp]`t$funcName"
 
 try{
  $conn = New-Object Data.SqlClient.SqlConnection($DB_CON_STR)
  $conn.Open()
  Write-Debug  "Connection Open.`t$funcName"
  
  $cmd = New-Object Data.SqlClient.SqlCommand
  $cmd.CommandText = $query
  $cmd.Connection = $conn
  
  #ExecuteReader
  $reader = $cmd.ExecuteReader()
  $count = 0
  
  #出力バッファ
  [Text.StringBuilder]$sb = New-Object Text.StringBuilder
  while( $reader.Read() ){
   foreach( $column in $fields ){
    $sb.Append($reader[$column].ToString())
   }
   $sb.AppendLine()
   $count++
  }
  $reader.Close()
  Write-Debug "出力行数= $count`t$funcName"
  
  #ファイルに出力
  Add-Content $file ($sb.ToString())
  
 }catch [Exception]{
  throw $Error[0]
 }finally{
  if(!([String]::IsNullOrEmpty($conn))){
   $conn.Close()
   Write-Debug  "Connection Close.`t$funcName"
  }
 }
}

0 件のコメント:

コメントを投稿