.NET DataReader和ORDER BY

时间:2009-08-17 20:17:01

标签: .net sql postgresql ado.net

DataReader从无序查询中返回行是否正常?

我从PostgreSQL 8.3.7数据库中获取一些行,并使用ORDER BY,LIMIT和OFFSET,如下所示:

SELECT id, name
FROM tbl_foo
ORDER BY name
LIMIT 10 OFFSET 0;

如果我手动运行此查询,结果将被排序,然后返回前十行,这就是我所期望的。

如果我使用PostgreSQL的第三方ADO.NET提供程序(http://www.devart.com/dotconnect/postgresql/)运行相同的查询,则不会以相同的顺序返回行。这可能是第三方提供商的问题,我在他们的论坛上发帖询问它。

我尝试使用DataTable.Fill()加载行,并使用DataReader.Read()循环遍历它们。在任何一种情况下,他们都没有按照正确的顺序进行。

我想我也会在这里查看一下,看看是否有人在使用DataReader方面遇到过相同的行为。

4 个答案:

答案 0 :(得分:4)

听起来像提供商的问题,只需确保您订购的列为您期望的行提供确定的结果,例如带

的表格
id | Name
1  | John
2  | Peter
3  | John

“名称”列上的订单可能不会在查询中产生相同的行顺序。它可以产生

1  | John        3  | John
3  | John    or  1  | John
2  | Peter       2  | Peter

答案 1 :(得分:1)

DataTable可以(通过View)对它自己进行一些排序,但如果DataReader无序返回它们,那么提供者(或你的查询)肯定有问题。

答案 2 :(得分:0)

我不知道Postgres或Devart驱动程序,但我可以在SQL Server(2000及更高版本)中确认,如果你指定了ORDER BY(就像你那样),那么这些行以SqlDataReader的指定顺序返回。我每天都依赖于此! : - )

马克

答案 3 :(得分:0)

今天早上重新回到问题中,并且经常会立即回答问题。

出于习惯,我使用Parameters在查询中设置ORDER BY,LIMIT和OFFSET的值。后两个在通过参数设置时工作正常,但ORDER BY没有,可能是因为它被转换为字符串文字。

为了兴趣,我测试了LIMIT和OFFSET,他们将接受字符串文字而不是INTEGER。

我想我需要为ORDER BY使用字符串连接。