从带有行号的表到 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#错误,而不是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