2016-10-14 17 views
2

mailing_list_membershipというテーブルからlist_nameという名前の列の最初の20行の値を取得しようとしています。Powershell PostrgreSQLクエリは、値の代わりにfieldcountを返します

$DBConnectionString = "Driver={PostgreSQL ANSI(x64)};Server=$MyServer;Port=$MyPort;Database=$MyDB;Uid=$MyUid;Pwd=$MyPass;" 
$DBConn = New-Object System.Data.Odbc.OdbcConnection; 
$DBConn.ConnectionString = $DBConnectionString; 
$DBConn.Open(); 
$DBCmd = $DBConn.CreateCommand(); 

$DBCmd.CommandText = "SELECT list_name FROM mailing_list_membership LIMIT 20"; 
$list_name_rows_value = $DBCmd.ExecuteReader(); 

Write-output $list_name_rows_value 
$DBConn.Close(); 

ただし、変数list_name_rows_valueのpowershellでは、フィールドカウントのみが返されます。

FieldCount 
---------- 
    1 
    1 
    1 
    1 
    1 
    1 
    1 
    1 
    1 
    1 
    1 
    1 
    1 
    1 
    1 
    1 
    1 
    1 
    1 
+0

'$ RDR = $ DBCmd.ExecuteReader()試してみてください。 $ tbl = New-Object System.Data.DataTable; $ tbl.Load($ rdr); $ rdr.Close(); $ tbl | ft -AutoSize' –

+0

よろしいですか?それはうまくいった。それらのコマンドは何と呼ばれていますか?そのリストを取得し、それをオブジェクトにしてからそれをフォーマットする...その一般的な名前があるので、そのチュートリアルシリーズを見ることができます.... – user6927085

+0

PowerShellが知っているのは、データテーブルを扱う方法。 'SqlDataReader'オブジェクトでは、自分で作業する必要があります。 –

答えて

1

SqlDataReaderオブジェクトでは、結果セットを自分でトラバースする必要があります。

$rdr = $DBCmd.ExecuteReader() 
while ($rdr.Read()) { 
    $rdr.GetValue(0) 
} 

それは、読者はあなたが定期的にFormat-*コマンドレットを使用して表示することができたDataTableを埋める持っている方が便利です::このよう

$rdr = $DBCmd.ExecuteReader() 
$tbl = New-Object Data.DataTable 
$tbl.Load($rdr) 
$rdr.Close() 

$tbl | Format-Table -AutoSize 
関連する問題