MySqlConnector - 动态字符串查询中的参数不会被设置

问题描述 投票:0回答:2

@pname 是 C# 代码中设置的参数:

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中的查询:

SET @sql = 'select name from person';

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

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

@pname 好像没有设置。

输出始终是这样的,就好像 @pname 为 null。

我希望查询看起来像:

select name from person
where name = 'John'

我尝试了不同的格式,例如:

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

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

但这没有用。

这是 MySqlConnector 中的错误、我这边的语法错误还是其他什么不同?

c# mysql mysql-connector
2个回答
0
投票

参数确实区分大小写。因此,将您的 sql 修改为以下内容可以解决该问题。

SET @sql = 'select name from person';

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

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

0
投票

忽略这里不需要使用

EXECUTE
,你需要
USING
来绑定参数:

EXECUTE stmt
    USING @pname

引用

但是,在这种情况下,您的 SQL 应该是:

select name from person
where name = @pname

没有说明书

EXECUTE

© www.soinside.com 2019 - 2024. All rights reserved.