无法在 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 时出现错误“无法分配给运算符”

在 cpp 中重新定义 new 和 delete 运算符以跟踪内存分配:无法跟踪整个内存块的删除大小

在 C# 中将字符串文字分配给字符串

在vb.net中使用c#条件运算符[重复]

Visual Studio 2003 C#,结构编译错误

Ruby 分配一个变量或在 nil 时引发错误