我使用ADODB连接从数据库查询中获得二维数组。简而言之,在打开连接后,我通过以下方式检索记录集:
$rs2 = New-Object -ComObject ADODB.Recordset
$sql = "<some SELECT statement here>"
$rs2.Open($sql, $conn)
$rows = $rs2.GetRows(1000)
我想只查看特定列的前10行。所以,我试过了:
$rows[0,(0..9)]
但它成功地失败了:
You cannot index into a 2 dimensional array with index [0]. At line:1 char:1 + $rows[0,(0..9)] + ~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : NeedMultidimensionalIndex
该阵列有1000行和200多列。我可以使用语法:
$rows[0,100]
没有问题。
我在这里错过了什么?
索引运算符接受值列表,但如果您的数组的维度> 1,则列表必须是数组列表,以便每个单独的列表元素标识原始数组的一个元素。
$indexes = 0..9 | ForEach-Object { ,@(0, $_) }
$rows[$indexes]
,@(0, $_)
中的主要逗号阻止PowerShell通过将数据包装在另一个展开的数组中来展开数组@(0, $_)
。
基本上,您需要构建一个标识要访问的数组元素的元组列表,然后将该列表与索引运算符一起使用。
$rows[0][0..9]
不起作用,因为你有一个二维数组,而不是一个锯齿状数组(数组数组)。
因为您正在使用ADODB.Recordset对象,所以您可以使用特定方法来访问数据。
要从第一行获取值,请按第一列:
$rows.GetValue(0,0)
第一行,第二列:
$rows.GetValue(1,0)
第二行,第六栏:
$rows.GetValue(5,1)
等等