我是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
答案 0 :(得分:1)
问题是你是用一个空字符串初始化你的数组(你传入的数组):
[String[]]$statements = ""
然后向它添加元素...所以你传递的数组的第一次迭代是一个空字符串,它不会起作用(它将命令文本设置为空,这就是' s你得到的错误)。它适用于第二个代码,因为您正在抓取数组的第二个对象(这是您的insert语句)。
将数组初始化为空,它应该可以工作:
[String[]]$statements = @()
除此之外,你的第一个脚本总是在第一次迭代时返回,因此它只能工作一次(不是你传递的每个insert
)。如果您传递多个查询,不确定要返回什么,但这取决于您的设计决策