无法在 C# 中使用 mysql 分配运算符
Posted
技术标签:
【中文标题】无法在 C# 中使用 mysql 分配运算符【英文标题】:unable to use mysql assigning operator in c# 【发布时间】:2020-02-25 08:38:44 【问题描述】:我正在尝试在我的 c# 程序中使用分配运算符 @a := 0
进行交叉连接(mysql)。但它会抛出错误说
在命令执行期间遇到致命错误。必须定义参数“@a”。
以下查询在我的 mysql 工具中执行良好。但在我的 C# 编程中使用它时无法执行。
string str = "select t1.x1,(@a := @a + t1.x1) x2 from table1 t1 cross join (select @a := 0) params";
MySqlCommand cmd = new MySqlCommand(str, connection);
connection.Open();
cmd.ExecuteNonQuery();
connection.Close();
输出应该是:
x1 x2
1 1
2 3
3 6
4 10
5 15
我该如何解决这个问题? 或者有解决办法吗?
【问题讨论】:
您用来执行查询的 C# 代码是什么? This post 和 this one 建议删除 C# 中为相关变量设置的任何参数。 @Diado,我已经用代码示例编辑了我的问题 查询代码对于 MySQL 是合法的(除了确定性结果所需的ORDER BY
子句)。所以这是c#问题(错误信息也是c#)。试试string str = "SET @a := 0; select x1,(@a := @a + x1) x2 from table1;";
指定 MySQL 版本。也许UDV使用过量?
@Akina,我试过了,还是一样的错误。
【参考方案1】:
默认情况下,MySQL Connector/NET 不允许 SQL 语句中的变量,只允许命令参数。如果您使用MySqlConnector,您将收到更有用的错误消息:
必须定义参数“@a”。要将其用作变量,请在连接字符串中设置“允许用户变量=true”。
如上所述,将AllowUserVariables=true
添加到您的连接字符串以允许在 SQL 命令中使用变量。
【讨论】:
以上是关于无法在 C# 中使用 mysql 分配运算符的主要内容,如果未能解决你的问题,请参考以下文章
使用 Python 3.4.3 时出现错误“无法分配给运算符”