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

如何在C# DbCommand中使用字面量@执行MySQL用户密码修改命令?

解决C#中DbCommand解析MySQL语句@符号的问题

针对你遇到的MySQL修改密码时@被DbCommand当作参数占位符的问题,给你几个直接可用的解决方案:

方案1:用双@转义字面量@

如果使用的是MySqlConnector或官方MySQL驱动,驱动会把SQL语句中的@@解析为单个字面量@,直接修改语句即可:

command.CommandText = $"ALTER USER '{user}'@@'%' IDENTIFIED BY '{password}'";

方案2:修改驱动的参数占位符

如果你不想改动SQL语句,可以在创建数据库连接时,指定参数占位符为MySQL原生的?,这样驱动就不会把@识别为参数:

// 在连接字符串中添加参数占位符配置
string connString = "server=xxx;user=xxx;password=xxx;database=xxx;Allow User Variables=True;ParameterPrefix=?";
using var conn = new MySqlConnection(connString);
// 之后执行原语句即可
command.CommandText = $"ALTER USER '{user}'@'%' IDENTIFIED BY '{password}'";

注:Allow User Variables=True是为了避免驱动误将MySQL用户变量(如@var)判定为参数,和当前场景关联度不高,但建议一并添加。

方案3:参数化语句(更安全,即使是一次性操作)

虽然你提到是一次性操作,但参数化能彻底规避SQL注入风险,同时也不会出现@符号的冲突问题:

command.CommandText = "ALTER USER @userHost IDENTIFIED BY @password";
command.Parameters.AddWithValue("@userHost", $"{user}@%");
command.Parameters.AddWithValue("@password", password);

这里把完整的用户名@主机作为一个参数传入,驱动会自动处理符号解析,完全规避占位符冲突。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 05:37:03