模块文件嵌套函数无法修改SQL CommandText的问题求助
问题解决:PowerShell中修改MySqlCommand对象属性时报错
问题根源
你的函数参数定义了数组类型的MySqlCommand,但实际传入的是单个对象,直接对数组操作导致赋值失败:
- 参数
[MySql.Data.MySqlClient.MySqlCommand[]]$sql里的[]表示这是一个数组,当你传入单个MySqlCommand时,PowerShell会自动将其包装为单元素数组。 - 读取
$sql.CommandText时,PowerShell会触发成员枚举,自动遍历数组元素读取属性,所以能得到正确值; - 但赋值
$sql.CommandText = ...时,PowerShell会尝试给数组本身设置该属性,而数组没有CommandText属性,因此报错。
解决方案
根据你的实际需求选择以下两种修改方式:
方式1:仅支持单个MySqlCommand对象
直接移除参数类型后的[],将参数定义为单个对象:
function WriteLogNew{ param( [string]$output= "", [string]$filename = "", [string]$path= "", [Parameter(Mandatory)][String]$writeLogMethod, [MySql.Data.MySqlClient.MySqlCommand]$sql # 去掉[],改为单个对象类型 ) if($writeLogMethod -eq 'sql'){ $sql.CommandText = "INSERT INTO `log_test` (`logdate`, `logtext`, `lognumber`) VALUES (NOW(), '" + $output + "', '-2');" $sql.ExecuteNonQuery() } }
方式2:支持多个MySqlCommand对象
如果需要批量处理多个命令对象,在函数内遍历数组逐个操作:
function WriteLogNew{ param( [string]$output= "", [string]$filename = "", [string]$path= "", [Parameter(Mandatory)][String]$writeLogMethod, [MySql.Data.MySqlClient.MySqlCommand[]]$sql ) if($writeLogMethod -eq 'sql'){ foreach($cmd in $sql){ # 遍历数组中的每个命令对象 $cmd.CommandText = "INSERT INTO `log_test` (`logdate`, `logtext`, `lognumber`) VALUES (NOW(), '" + $output + "', '-2');" $cmd.ExecuteNonQuery() } } }
额外提示
测试文件中$argumentsNew的writelogMethod设置为'file',若要测试SQL日志功能,需将其改为'sql',否则不会执行SQL分支的代码。
内容的提问来源于stack exchange,提问作者dteusner
相关产品推荐
相关产品推荐

