从带有行号的表到 C# 数据表的选择会出现错误

本文关键字:选择 数据表 错误 | 更新日期: 2023-09-27 18:35:33

i use MySQL我有一个MySQL表。
我想选择所有带有行号的记录。
为此,我使用此SQL命令。

SELECT @row := @row + 1 as row, t.* FROM t_persons t, (SELECT @row := 0) r

但是当我尝试运行命令并将数据加载到数据表时,如下所示

DataTable dt = new DataTable();
command.CommandText = sql;
adapter.SelectCommand = command;
adapter.Fill(dt);

它给出一个错误,例如在命令执行期间遇到的致命错误。
但是当我在phpmyadmin中尝试此命令时,它工作正常。那么问题出在哪里。以及如何解决它。 谢谢。。。

从带有行号的表到 C# 数据表的选择会出现错误

这实际上是一个C#错误,而不是MySQL错误。C# 看到 @ 并假设你想要使用参数化查询。

添加



;Allow User Variables=True 到连接字符串将修复它。

在此处找到 如何在 .NET MySqlCommand 中使用 MySql 用户定义变量?

它看起来像是查询中MySQL变量的完全有效的MySQL实现。 您可以使用您选择的 @row := 0 预先声明它们作为"r"别名。 它认为问题是您将最终的列名称称为"行",这可能是保留的。 只是为了咧嘴笑,改成:

@row := @row + 1 作为 myRow

或。。。将变量从@row更改为@varRow(变量行)...或两者兼而有之...

@varRow := @varRow +1 作为 myRow

我不知道谁对答案投了反对票,但是您在MySQL上所做的是很正常的,而且我已经做了很多次,这可以从我在s/o发布的许多答案中看到。
然后我会尝试先按表检索列,然后检索@vars列......不知道在尝试写入@var之前,引擎中是否有某些东西可以获取有效的记录条目......

SELECT 
      t.*,
      @varRow := @varRow + 1 as myRow
   FROM 
      t_persons t, 
      (SELECT @varRow := 0) r