PowerShell读取SQL多行数据失败:如何获取多行结果及行数
PowerShell读取SQL多行结果及统计总行数方法
读取所有行数据
你当前的问题是只调用了一次Read()方法,仅能获取第一行数据。SqlDataReader是向前只读的数据流,需要通过循环调用Read()遍历所有行,直到方法返回false(表示无更多数据)。另外注意列索引从0开始,你的查询仅返回value一列,所以应该用GetValue(0)而非GetValue(1)。
修正后的脚本示例:
$command = $connection.CreateCommand() $command.CommandText = $query $result = $command.ExecuteReader() $allValues = @() # 循环读取每一行 while ($result.Read()) { # 读取当前行的第0列(唯一的value列) $currentValue = $result.GetValue(0) $allValues += $currentValue } # 关闭DataReader释放资源 $result.Close() # 输出所有结果 $allValues
统计总行数
SqlDataReader本身不直接提供总行数属性,你可以通过两种方式获取:
方式1:读取数据时存入集合,再取集合长度
在上面的脚本中,$allValues是存储所有结果的数组,直接取其Length属性即可得到总行数:
$totalRows = $allValues.Length
方式2:先执行COUNT查询获取行数
如果不需要先获取数据,可单独执行统计查询:
# 创建统计行数的命令 $countCmd = $connection.CreateCommand() $countCmd.CommandText = "SELECT COUNT(*) FROM table WHERE a IN ('here', 'there')" # ExecuteScalar()直接返回单行单列的结果 $totalRows = $countCmd.ExecuteScalar()
关于你遇到的异常说明
$result.GetValue(1)无效:你的查询仅返回1列,列索引从0开始,1是不存在的列索引。- 再次调用
Read()无效:需将Read()放在循环中,才能依次读取每一行;单次调用后若未处理,再次调用会移动到下一行,但你没做存储或输出,所以看不到效果。 $result.count显示1 1:SqlDataReader没有Count属性,这个输出是PowerShell对对象的错误解析,不代表实际行数。
内容的提问来源于stack exchange,提问作者dmataz
相关产品推荐
相关产品推荐

