sql - 如何在Powershell中遍历数据表?

标签 sql powershell 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

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

用于获取每一行数据的脚本:
foreach ($Row in $BackupData) {
    Write-Host "$Row[0]"
    Write-Host "$Row[1]"
}

我得到像这样的输出:

服务名称[0]
主机名[0]
System.Data.DataRow [0]
System.Data.DataRow [0]
System.Data.DataRow [0]
System.Data.DataRow [0]

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

unable to index an object of type system.Data.DataColumn



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

最佳答案

像这样用SqlDataAdapter填充数据表要容易得多:

$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])"

关于sql - 如何在Powershell中遍历数据表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39590167/

相关文章:

mysql - 什么是最佳解决方案,使用 Inner Join 或多个查询?

java - 如何在 Java 中运行 .sql 脚本(从文件)并使用 Spring 返回结果集?

sql - 通过组合键从 select 中删除记录

powershell - 添加Get-ChildItem列表的文件大小

c# - DataTable 在 RejectChanges 上抛出异常

MySQL 外键错误 : Can't create table

powershell - Azure CDN - 通过资源管理 API 的自定义域 SSL

powershell - 在 PowerShell 中加载自定义函数

excel - 读取 Excel Open XML 会忽略空白单元格

jquery - 如何使用 Shift 键选择 jQuery 数据表中的多行