如何在powershell中循环数据表?

时间:2016-09-20 09:16:54

标签: sql powershell datatable

从datatable获取数据时遇到不同的错误。这是我填写数据表的代码:

$dt = New-Object System.Data.DataTable
$dt.Columns.Add("ServiceName")
$dt.Columns.Add("HostName")

$SQLConnection.Open()
$Reader = $SqlCmd.ExecuteReader()
while ($Reader.Read()) {
    $dt.Rows.Add($Reader.GetValue(0), $Reader.GetValue(1))
}
$SqlConnection.Close()
return $dt

上面的代码是在一个返回datatable的函数中,当我在调用脚本中访问这个返回的数据表时,我没有得到数据。

获取每一行数据的脚本:

foreach ($Row in $BackupData) {
    Write-Host "$Row[0]"
    Write-Host "$Row[1]"
}

我得到的输出如下:

ServiceName[0]
HostName[0]
System.Data.DataRow[0]
System.Data.DataRow[0]
System.Data.DataRow[0]
System.Data.DataRow[0]

当我使用"$($Row[0])"时,我收到另一个错误

  

无法索引system.Data.DataColumn类型的对象

如何获取每行和每列的数据?

1 个答案:

答案 0 :(得分:1)

在SqlDataAdapter的帮助下填充DataTable要容易得多:

$dt = New-Object System.Data.DataTable
$da = New-Object System.Data.SqlClient.SqlDataAdapter -ArgumentList $ConnectionString, $SqlQuery
$da.fill($dt)

因此您无需打开和关闭连接以及使用SqlDataReader。

所有行现在都是DataTable对象$ dt的一部分,可以使用行索引和特定字段名称进行访问

$dt[0].FieldName

其中“FieldName”是该表字段的名称。或者无需知道特定字段的名称

$dt.Row[0}[0]

错误的原因是你必须使用带有Write-Host的子表达式,如下所示:

Write-Host "value of first field: $($Row[0])"