Powershell无法在DataRow中建立索引

时间:2018-11-28 10:13:15

标签: powershell datatable datarow

在Powershell脚本中,我使用SqlConnection和SqlCommand在SQL Server上执行查询,并将结果加载到DataTable中,例如:

$sqlconn = New-Object System.Data.SqlClient.SqlConnection "Server=.;Integrated Security=true;Initial Catalog=master"
$sqlconn.Open()
$sqlcmd = $sqlConn.CreateCommand()
$sqlcmd.CommandText = "EXEC sp_WhoIsActive @find_block_leaders=1,@get_outer_command=1,@get_transaction_info=1,@get_task_info=2,@get_additional_info=1,@get_plans=1"
$dt = New-Object System.Data.DataTable
$dt.Load($sqlcmd.ExecuteReader())

以前,它可以按预期运行。我可以操纵DataTable,将其输出到HTML文件,然后根据特定行和列的值执行其他操作...,等等。但是稍后,我在输出HTML文件之前插入以下代码,但它不起作用:< / p>

if(($dt.Rows.Count -gt 0) -and ($dt.Rows[0]["sql_text"] -match 'someTable\.someColumn=(\d+)')) {
  $sqlconn.ChangeDatabase("someDB")
  $sqlcmd.CommandText = "SELECT name FROM anotherTable WHERE id=$($Matches[1])"
  $dt.Rows[0]["sql_text"] = $dt.Rows[0]["sql_text"] + "`n" + "--" + $sqlcmd.ExecuteScalar()
}

您可以看到我想做的是:如果DataTable不为空并且第一行的“ sql_text”列与特定的regex模式匹配,请在另一个表中查找匹配的值以获取其他数据,并追加将该数据字符串返回到第一行的“ sql_text”列中。

Powershell说:

無法編制 System.Data.DataRow 型別物件的索引。
位於 F:\jobs\WhoIsActive.ps1:101 字元:17
+     $dt.Rows[0][ <<<< "sql_text"] = $dt.Rows[0]["sql_text"] + "`n" + "--" + $
sqlcmd.ExecuteScalar()
    + CategoryInfo          : InvalidOperation: (sql_text:String) [], RuntimeE 
   xception
    + FullyQualifiedErrorId : CannotIndex

我在繁体中文环境中,所以很不幸,我不知道英文的确切中文部分。据我所知,它可能是“无法在System.Data.DataRow类型的对象中建立索引。”

我不明白为什么它无法访问$dt.Rows[0]的“ sql_text”索引。它只是在if(($dt.Rows.Count ...行,不是吗?

0 个答案:

没有答案