【问题标题】:create tree/XML structure from SQL query c#从 SQL 查询 c# 创建树/XML 结构
【发布时间】:2012-10-15 23:55:26
【问题描述】:

这是我当前的问题。我需要显示一个显示召回名册的树状结构。我们的 DBA 创建了一个返回 [level],[name],[contact_info] 的存储过程。

示例如下:

[1] [test name1] [contact info]
[2] [sub to1] [contact info]
[3] [sub to2] [contact info]
[4] [sub to3] [contact info]
[3] [sub to2] [contact info]
[2] [sub to1] [contact info]

等等……

按层级排序

我并没有真正使用过 XML,但这是加载/呈现这些数据的方式。目前,当我检索数据时,我将其返回到数据表中。可能还需要将此数据导出到 Excel。

谁能给我一个好的方向吗?

【问题讨论】:

  • 如果您从 SQL Sever 获取数据,那么它也可以为您生成 XML。
  • 应该确定该数据的层次结构是什么?如何在行中确定父/子关系,除了名称和级别之外,我看不到任何关系,但它们都是重复的。
  • @JeffMercado 没有来自海报的更多信息,我唯一的猜测是层次结构应该是从数据的顺序派生的(尽管可能,这是一种不好的做法)。所以每一行都是它上面第一行的子元素level=<mylevel>-1
  • @ean5533:嗯,这很有道理。绝对是个坏主意。
  • @JeffMercado 是的,我没有包含一个额外的字段,它是一个用于排序的整数。这就是我现在从我的 DBA 那里得到的一切,所以这就是我必须使用的。确定孩子是下一个记录是否更高我知道他们是上一个孩子的孩子。如果下一个级别较低,则该用户是前一个用户的子级,前一个用户的级别将低一个。

标签: c# xml


【解决方案1】:

1) 不要相信任何您无法建立和操纵的数据结果顺序。从存储过程中检索数据的“标准”方式是数据读取器、数据表或数据集。您甚至可以使用实体框架来封装数据。他们都不能确保订单被保留。假设您的结果集将被订购太冒险了。

2) 要求您的 DBA 在结果中包含层次结构信息(例如,具有父记录键的字段)

3) 递归适用于层次结构问题。设计您的算法以从一个 xml 节点和一堆顶级记录开始。对于每条记录:添加一个新的 xmlnode 并通过您刚刚添加的记录的子项进行递归调用。

4) 如果预期结果很小(比如说几百条记录),您可以获取所有数据,将其存储在数据表中,然后使用 Filter 属性搜索特定记录。如果预期结果是数千条记录,请让您的 DBA 创建一个存储过程来读取一条记录的子记录,并为 xml 节点中的每条记录调用该过程。确保数据中没有循环:)

【讨论】:

猜你喜欢
  • 2017-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-11
  • 2021-01-21
  • 2018-11-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多