来自MySQL的Powershell中的奇怪行为

时间:2017-04-28 08:36:17

标签: mysql powershell

我是PowerShell的新手,并且有一个关于在PowerShell中使用MySQL的具体问题。

我有这个功能:

Function run-mySQLInsertQuery{
    param(
        $connection,
        [string[]]$insertQuery
    )
    foreach ($command in $insertQuery){
        $MySQLCommand = $connection.CreateCommand()
        $MySQLCommand.CommandText = $command
        $rowsInserted = $MySQLCommand.ExecuteNonQuery()
        if ($rowsInserted) {
            return $rowsInserted
        } else {
            return $false
        }
    }
}

使用此版本的功能,我会收到以下错误:

Cause:
"The CommandText property has not been properly initialized."

Errorline:
        $rowsInserted = $MySQLCommand.ExecuteNonQuery()

我搜索了一个解决方案并将我的功能编辑了一下(用于测试目的):

Function run-mySQLInsertQuery{
    param(
        $connection,
        [string[]]$insertQuery
    )
    $abcd = $insertQuery[1]
    foreach ($command in $insertQuery){
        $MySQLCommand = $connection.CreateCommand()
        $MySQLCommand.CommandText = $abcd
        $rowsInserted = $MySQLCommand.ExecuteNonQuery()
    }
}

使用此代码,该函数可以毫无问题地执行查询。我现在的问题是,为什么?我真的看不出有什么不同,因为在$command中应该是$abcd中的完全相同的查询。或者我得错了什么?

修改 正如它的评论一样,这就是我如何称呼函数:

[String[]]$statements = ""

foreach($key in $arrayStatus.Keys){
    $item = $arrayStatus[$key]
    $insertStatus = "INSERT INTO tx_tphbusinessofferings_domain_model_status (status_id, status) VALUES ('$key', '$item')"
    $statements += $insertStatus
}
$Rows = run-mySQLInsertQuery -connection $mySQLconnection -insertQuery $statements

1 个答案:

答案 0 :(得分:1)

问题是你是用一个空字符串初始化你的数组(你传入的数组):

[String[]]$statements = ""

然后向它添加元素...所以你传递的数组的第一次迭代是一个空字符串,它不会起作用(它将命令文本设置为空,这就是' s你得到的错误)。它适用于第二个代码,因为您正在抓取数组的第二个对象(这是您的insert语句)。

将数组初始化为空,它应该可以工作:

[String[]]$statements = @()

除此之外,你的第一个脚本总是在第一次迭代时返回,因此它只能工作一次(不是你传递的每个insert)。如果您传递多个查询,不确定要返回什么,但这取决于您的设计决策