是否可以在.NET MySqlCommand中使用MySql用户定义变量?

时间:2009-06-06 03:57:04

标签: c# .net mysql

我正在尝试执行当前在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;
}

关于如何解决这个问题的任何想法?或者我可以通过哪种方式获得行号?

3 个答案:

答案 0 :(得分:37)

我发现这个blog,告诉我们,对于更新版本的.net连接器,你必须添加

;Allow User Variables=True

到连接字符串。 比较我的问题How can I use a MySql User Defined Variable in a .NET MySqlCommand?

答案 1 :(得分:3)

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

我在5.0 documentation

中找到了这个
  

提供程序的早期版本使用“@”符号标记SQL中的参数。这与MySQL用户变量不兼容,因此提供程序现在使用'?'用于在SQL中查找参数的符号。要支持旧代码,可以在连接字符串上设置“old syntax = yes”。如果这样做,请注意,如果您未能定义要在SQL中使用的参数,则不会抛出异常。

答案 2 :(得分:1)

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

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