Запрос Powershell PostrgreSQL возвращает только fieldcount вместо значения

#postgresql #powershell

#postgresql #powershell

Вопрос:

Я пытаюсь получить значения первых двадцати строк столбца с именем list_name из таблицы с именем mailing_list_membership .

 $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();
 

Однако в powershell для переменной list_name_rows_value он возвращает только количество полей.

 FieldCount
----------
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
 

Комментарии:

1. Попробуйте $rdr = $DBCmd.ExecuteReader(); $tbl = New-Object System.Data.DataTable; $tbl.Load($rdr); $rdr.Close(); $tbl | ft -AutoSize

2. Хорошо. Это сработало. Как называется выполнение этих команд? Он берет этот список и превращает его в объект, а затем форматирует его…. Есть ли для этого общее название, чтобы я мог просмотреть серию учебных пособий по нему….

3. Это называется «заполнение таблицы данных» 😉 PowerShell знает, как обрабатывать таблицы данных. С SqlDataReader объектами вам нужно выполнить работу самостоятельно.

Ответ №1:

С SqlDataReader объектами вам нужно самостоятельно просмотреть результирующий набор, например, так:

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

Удобнее, чтобы читатель заполнял таблицу данных, которую вы можете отобразить с помощью обычных Format-* командлетов:

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

$tbl | Format-Table -AutoSize