DataReader.NextResult检索结果的顺序始终是相同的

时间:2009-12-31 13:44:29

标签: ado.net datareader

我有一个SELECT查询,它产生多个结果,并且没有任何ORDER BY子句。 如果我多次执行此查询然后使用DataReader.NextResult()迭代结果,我是否可以保证以相同的顺序获得结果?

例如如果我执行以下返回199行的查询:

SELECT * FROM products WHERE productid < 200

我总能得到第一个带有productid = 1的结果吗?等等?

据我所知,它始终以相同的顺序返回结果,但我找不到任何有关此行为的文档。

======================================

根据我的研究: 查看此博客Conor vs. SQL。我实际上想问一下,即使表中的数据保持不变(即没有更新或删除),查询结果是否也会改变。但似乎在大表的情况下,当SQL服务器员工并行时,顺序可以不同

3 个答案:

答案 0 :(得分:7)

首先,要迭代DataReader中的行,您应该致电Read,而不是NextResult
如果您的查询包含多个SELECT语句,则调用NextResult将移至下一个结果集。

要回答你的问题,你不能依赖于此 没有ORDER BY子句的查询将返回SQL Server默认迭代顺序中的行 对于小型表,通常是添加行的顺序,但这不保证,并且可能随时更改。例如,如果表被索引或分区,则顺序将不同。

答案 1 :(得分:3)

不,DataReader将按照它们从SQL返回的顺序返回结果。如果未指定ORDER BY子句,那么它将是表中存在的顺序。

答案 2 :(得分:1)

有可能,甚至可能他们总是以相同的顺序返回,但这不能保证。该顺序由数据库服务器上的queryplan(至少在SQL Server中)确定。如果某些内容改变了查询计划,则订单可能会发生变化。如果结果的顺序对数据的处理很重要,则应始终使用ORDER BY。