2009-06-06 68 views
14

我试图执行一个当前在phpMyAdmin中工作的查询,但它在.NET中使用MySqlAdapter执行时不起作用。这是Sql语句。是否可以在.NET MySqlCommand中使用MySql用户定义的变量?

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

你可以列添加到您的表称为ROWNUM,然后用值来填充它:

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

我说实话我会回避手动生成数字这种方式,但我可以看到这是一个可能的解决方案。我想我真的需要重新思考我将数据提取出来的方式。 – 2009-06-17 02:38:17

3

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

我发现这个在5.0 documentation

提供商的早期版本中使用的符号“@”,以纪念在SQL参数。这与MySQL用户变量不兼容,所以提供者现在使用'?'符号来查找SQL中的参数。要支持较旧的代码,您可以在连接字符串上设置'old syntax = yes'。如果你这样做,请注意,如果你不能定义一个你想在你的SQL中使用的参数,就不会抛出异常。

+0

感谢您的更新。我也在文档中看到了这一点。这是一个相当新的版本,因为它几个星期前才被下载。我尝试了旧的语法=是,没有改变行为。 – 2009-06-16 04:22:53

+0

现在链接似乎已经死亡。 – Bugs 2017-04-18 15:23:28

相关问题