mysql - PowerShell 不会逐行迭代 MySQL 结果 - 为什么?

标签 mysql loops powershell line

我使用以下代码使 PowerShell 打印 SQL-SELECT 的结果 ...

[String] $mySQlServerName = "localhost";
[String] $mySQLDatenbankName = "test";
[String] $userName = "root";
[String] $password = "";

$mySqlConnection = New-Object MySql.Data.MySqlClient.MySqlConnection;

$mySqlConnection.ConnectionString = "server=$mySQlServerName;user id=$userName;password=$password;database=$mySQLDatenbankName;pooling=false";

$mySqlConnection.Open();

$mySqlCommand = New-Object MySql.Data.MySqlClient.MySqlCommand;

$mySqlCommand.Connection = $mySqlConnection;

$mySqlCommand.CommandText = "SELECT SourceIPO1, SourceIPO2, SourceIPO3, SourceIPO4, rejections FROM test.malicious_apache;";

write-host $mySqlCommand.CommandText;

$reader = $mySqlCommand.ExecuteReader();

if ($reader -eq $null)
{
    write-host "no result";
}
else
{
    [int] $columnCount = $reader.VisibleFieldCount;
    write-host "$columnCount columns in result ...";

    while ($reader.Read())
    {
        write-output "next row";
        for ($i= 0; $i -lt $reader.VisibleFieldCount; $i++)
        {
            write-output $reader.GetValue($i).ToString()
        }
    }

    $reader.Close();
}

$mySqlConnection.Close();

并得到以下输出...

PS C:\Users\Max> TestSelect.ps1
SELECT SourceIPO1, SourceIPO2, SourceIPO3, SourceIPO4, rejections FROM test.malicious_apache;
5 columns in result ...

用 mysql-client 发出的 SELECT 给出了大约 5,966 行!作为 PowerShell 的新手,我感到惊讶和困惑,这段代码在许多网站上使用,对我来说似乎完全合理,为什么我没有得到“下一行”的单个输出?

非常感谢任何帮助!

最佳答案

当比较运算符的左操作数是集合时,则该运算符的结果不是 bool 值,而是包含所有元素的数组满足该比较运算符:

$a=1..5
$a -ne 3 # return array with four elements 1,2,4,5
$a -gt 3 # return array with two elements 4,5
$a -eq 3 # return array with one element 3
$a -lt 1 # return empty array

要评估该结果,PowerShell 必须枚举集合。

DbDataReader 实现了 IEnumerable,因此它被 PowerShell 视为集合。要评估 $reader -eq $null 表达式,PowerShell 必须枚举 $reader。作为该枚举的结果,$reader 将前进到当前结果集的末尾,因此您没有更多的行可以读取。要实际比较集合与 $null,您必须颠倒 -eq 运算符的操作数顺序:$null -eq $reader

关于mysql - PowerShell 不会逐行迭代 MySQL 结果 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33055190/

相关文章:

c++ - 大写字母

c# - 如何使用 C# 执行 PowerShell 脚本

windows - 如何比较文件列表的大小并取最大的?

php - array_intersect_key PHP 数组与 MYSQL 数据库

mysql - 关于pair-remove重复的Sql查询

php - 如何将数据从iphone发送/存储到mysql数据库并在网页上显示结果

Python Fizzbuzz 循环问题

mysql - 获取所有产品,并将特定订单的产品放在前面

python list __iter__ 方法在每个循环中调用?

powershell - 当我将结果存储到变量时,为什么会得到不同的结果?