从SQL查询返回父子数据

时间:2012-02-09 22:40:02

标签: asp.net sql sql-server

我有一个asp.net页面需要返回一对多关系的对象。即,存在单个标题行,后面是未指定数量的数据行。通常会有1到10行,所以我不会在这里处理大量数据 - 只是一个经常调用的页面。

我知道OLE提供程序支持SHAPE命令,该命令允许返回分层数据,但我使用的SQLDataReader(ADO?)不支持它。问题是,这里的最佳实践/最佳表现是什么?

  1. 查询中的INNER JOIN并返回包含标题和数据行的单个表,这意味着标题在第一行之后的每一行中重复。这会产生不确定的数据流量还是在幕后隐藏优化?
  2. 对SQLCommand.executeReader()进行两次单独调用 - 一次返回标题行,另一次返回可变数量的数据行。但是这会导致发出2个单独的查询而不是1个查询的开销。
  3. 使用支持SHAPE的API。
  4. 只对SQLCommand.executeReader()进行一次调用,但查询包含2个select语句,只返回2个数据集。然后在处理标题行后调用SQLDataReader.nextResult()。这似乎是解决我原始问题的好主意,因为只有一个标题行。在其他情况下,情况并非如此,在这种情况下,#4不是一种选择。此外,数据访问是顺序的,我的应用程序需要在使用数据行之前和之后使用标头。所以我必须在调用nextResult()之前将标题行写入内存中的DataTable。

1 个答案:

答案 0 :(得分:1)

我没有使用SHAPE的经验,所以我不知道它是否表现良好。在其他三个选项中,选项#4绝对是最有效的,因为它最大限度地减少了到数据库的访问和数据重复。