从具有行号的表中选择到 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# 数据表给出错误的主要内容,如果未能解决你的问题,请参考以下文章