You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

模块文件嵌套函数无法修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 17:30:06