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方面遇到过相同的行为。
答案 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使用字符串连接。