从具有行号的表中选择到 c# 数据表给出错误

Posted

技术标签:

【中文标题】从具有行号的表中选择到 c# 数据表给出错误【英文标题】:select from table with row number to c# datatable gives an error 【发布时间】:2012-06-03 17:12:31 【问题描述】:

我使用 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 中尝试这个命令时它工作正常。那么问题是什么。以及如何解决。 谢谢...

【问题讨论】:

这在我看来不像 sql。 @row 看起来像参数。然而没有一个被定义。这不是您在 C# 中构建 SQL 的方式 我猜sql 是一个包含您之前显示的查询的字符串,对吧?但是你在使用之前定义了@row吗? 不,我之前没有定义@row... 嗯,似乎是对的。 look here。唯一的区别是as 【参考方案1】:

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

添加

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

在这里找到How can I use a MySql User Defined Variable in a .NET MySqlCommand?

【讨论】:

【参考方案2】:

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

@row := @row + 1 as myRow

或者...将您的变量从@row 更改为@varRow(变量行)...或两者的组合...

@varRow := @varRow +1 as myRow

我不知道是谁对答案投了反对票,但你所做的对 MySQL 来说是很正常的,我已经做过很多次了,从我在 s/o 上发布的许多答案可以看出。 然后我会尝试先检索表中的列,然后是@vars 列...在尝试编写@var 之前不知道它是否在引擎中获取有效的记录条目...

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

【讨论】:

@namco,尝试修改答案

以上是关于从具有行号的表中选择到 c# 数据表给出错误的主要内容,如果未能解决你的问题,请参考以下文章

用于从具有复杂结构的表中选择数据的 sql 查询

如何在 C# 中将插入的行捕获到一个巨大的表中? [关闭]

使用 JQuery 从具有 JSON 值的表中选择行

将具有 LONG RAW 列的表中的数据从一个数据库复制到另一个数据库

从具有不同条件的表中选择总和和平均值

从具有相同值的两个表中选择数据后结果重复