是否有可能在.NET MySqlCommand中使用MySql用户定义的variables?

我试图执行一个查询,目前在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是一个参数,并抛出一个exception,因为我没有定义它。

 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; } 

任何想法,我怎么能解决这个问题? 或者可能的方式让我得到一个行号?

我发现这个博客 ,它告诉,你必须添加更新版本的.net连接器

 ;Allow User Variables=True 

到连接string。 比较我的SO问题如何在.NET MySqlCommand中使用MySql用户定义的variables?

你使用的是什么版本的MySQL数据提供者? 您可能需要更新。

我在5.0文档中find了这个:

提供程序的以前版本使用'@'符号来标记SQL中的参数。 这与MySQL用户variables不兼容,所以提供者现在使用'?' 符号来查找SQL中的参数。 要支持较旧的代码,可以在连接string上设置“old syntax = yes”。 如果你这样做的话,请注意,如果你没有定义一个你想在你的SQL中使用的参数,就不会抛出exception。

你可以在你的表中添加一个名为rownum的列,然后用值填充它:

 table.Columns.Add("rownum"); for (int i=0; i < table.Rows.Count; i++) { table.Rows[i]["rownum"] = i; }