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

动态SQL查询中MySqlConnector参数无法赋值问题排查

动态SQL中参数未赋值问题

在C#代码中通过以下方式设置@pName参数:

using (MySqlCommand dynamicQueryCommand = new MySqlCommand(dynamicQueryWithParameter, conn))
{
    dynamicQueryCommand.Parameters.Add("@pName", MySqlDbType.String);
    dynamicQueryCommand.Parameters["@pName"].Value = "John";

    using (MySqlDataReader dynamicQueryReader = dynamicQueryCommand.ExecuteReader())
    {
        string output = "";
        object[] values = new object[dynamicQueryReader.FieldCount];

        while (dynamicQueryReader.Read())
        {
            dynamicQueryReader.GetValues(values);

            output += values[0] + "\n";
        }
    }
}

dynamicQueryWithParameter中的SQL语句如下:

SET @sql = 'select name from person';

SET @sql = Concat(@sql, ' WHERE name = @pName ');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

但@pName参数似乎未被赋值,输出结果始终如同该参数为null。预期生成的查询语句应为:

select name from person
where name = 'John'

尝试过多种写法,例如:

SET @sql = Concat(@sql, ' WHERE name = '@pName' ');

或

SET @sql = Concat(@sql, ' WHERE name = ''@pName'' ');

均未解决问题。请问这是MySqlConnector的Bug、我的语法错误还是其他问题?


更新:临时解决方法

存在一些临时解决方法,例如Marc Gravell建议的使用USING,但当查询较长且需修改时,统计查询中的?数量来添加新参数容易出错,且USING后的参数顺序至关重要。

另一种方法是创建临时用户变量并在字符串查询中使用:

SET @pName_var = @pName;

SET @sql = 'select name from person';

SET @sql = Concat(@sql, ' WHERE name = @pName_var ');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

此方法可得到预期结果,那么这是否是MySqlConnector的Bug或未支持的特性?还是我在其他地方存在错误?


内容的提问来源于stack exchange,提问作者mitdm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 09:57:08