是否可以在 .NET MySqlCommand 中使用 MySql 用户定义变量?
Posted
技术标签:
【中文标题】是否可以在 .NET MySqlCommand 中使用 MySql 用户定义变量?【英文标题】:Is it possible to use a MySql User Defined Variable in a .NET MySqlCommand? 【发布时间】:2010-10-31 19:57:48 【问题描述】:我正在尝试执行当前在 phpMyAdmin 中有效的查询,但在使用 mysqlAdapter 在 .NET 中执行时它不起作用。这是Sql语句。
SELECT @rownum := @rownum +1 rownum, t . *
FROM (
SELECT @rownum :=0
) r, (
SELECT DISTINCT
TYPE FROM `node`
WHERE TYPE NOT IN ('ad', 'chatroom')
)t
它使用@rownum 对从我的内部标量查询返回的每个不同行进行编号。但如果我在 .NET 中使用它,则假定 @rownum 是一个参数并抛出异常,因为我没有定义它。
using (var sqlConnection = new MySqlConnection(SOURCE_CONNECTION))
sqlConnection.Open();
MySqlDataAdapter sqlAdapter = new MySqlDataAdapter(SqlStatement, sqlConnection);
DataTable table = new DataTable();
sqlAdapter.Fill(table);
sqlConnection.Close();
return table;
关于如何解决这个问题的任何想法?或者可能的方式让我得到一个行号?
【问题讨论】:
【参考方案1】:您使用的是什么版本的 MySQL 数据提供程序?您可能需要更新。
我在5.0 documentation 中找到了这个:
提供程序的早期版本使用“@”符号来标记 SQL 中的参数。这与 MySQL 用户变量不兼容,因此提供程序现在使用“?”用于在 SQL 中定位参数的符号。要支持旧代码,您可以在连接字符串上设置 'old syntax=yes'。如果您这样做,请注意,如果您未能定义您打算在 SQL 中使用的参数,则不会引发异常。
【讨论】:
感谢您的更新。我也在文档中看到了这一点。这是一个相当新的版本,因为它是在几周前下载的。我尝试了旧的 syntax=yes,但行为没有改变。 链接现在似乎已失效。【参考方案2】:我发现了这个blog,它告诉你,对于较新版本的 .net 连接器,您必须添加
;Allow User Variables=True
到连接字符串。 比较我的 SO 问题How can I use a MySql User Defined Variable in a .NET MySqlCommand?
【讨论】:
【参考方案3】:您可以在表中添加一个名为 rownum 的列,然后用值填充它:
table.Columns.Add("rownum");
for (int i=0; i < table.Rows.Count; i++)
table.Rows[i]["rownum"] = i;
【讨论】:
老实说,我会回避以这种方式手动生成数字,但我认为这是一种可能的解决方案。我认为我真的需要重新考虑我提取数据的方式。以上是关于是否可以在 .NET MySqlCommand 中使用 MySql 用户定义变量?的主要内容,如果未能解决你的问题,请参考以下文章
使用 MySqlCommand 在一个查询中进行多个 INSERT
.NET MySqlTransactions 是不是在本地进行批处理/缓冲?
在一个查询中使用 MySqlCommand 将多条记录插入 MySQL C# (MySQLConnector) & command 转义引号的参数
如何设置两个连接字符串 MySqlCommand 对象参数?