@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 中的错误、我这边的语法错误还是其他什么不同?
参数确实区分大小写。因此,将您的 sql 修改为以下内容可以解决该问题。
SET @sql = 'select name from person';
SET @sql = Concat(@sql, ' WHERE name = @pName ');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
忽略这里不需要使用
EXECUTE
,你需要USING
来绑定参数:
EXECUTE stmt
USING @pname
但是,在这种情况下,您的 SQL 应该是:
select name from person
where name = @pname
没有说明书
EXECUTE