您的位置:首页 > 数据库 > Oracle

快速生成目录树(Oracle)

2005-12-23 11:42 295 查看
原来我生成目录树的方法是把表中的数据按某个条件读出来,然后在程序中通过递归生成目录树,如果节点超过1000个,速度会非常慢。最近找到一个好的方法:
假如目录树的表结构如下:
ID            ID
父ID         PID
节点名称 Text
第一步:查询数据。查询数据时,要使用Oracle自己的递归,语法如下:
SELECT ID,PID,TEXT FROM TABLETREE START WITH ID='0' CONNECT BY PID=PRIOR ID
如果有其它的条件可以在最后加上Where条件,递归的起始条件(Start With)可以有多个用And连接,如:(ID='0' And Text='aaa') 递归的条件也可以是多个,条件之间也用And连接。
用Oracle递归的特点是:查询的结果完全按照树节点从上到下的顺序排列。这样我们可以只遍历一次就能生成目录树了。
第二步:生成树目录。假设查询结构放在名字为table的DataTable里。
TreeNode parentNode = new TreeNode();
DataRow row = table.Rows[0];
TreeNode node = new TreeNode();
node.Tag = row["ID"].ToString();
node.Text = row["Text"].ToString();
_mainTree.Nodes.Add(node);
parentNode = node;
if(table.Rows.Count>0)
{
 for(int i=1;i<table.Rows.Count;i++)
 {
  row = table.Rows[i];
  string strPID = row["PID"].ToString();
  node = new TreeNode();
  node.Tag = row["ID"].ToString();
  node.Text = row["Text"].ToString();
  while(strPID != parentNode.Tag.ToString())
  {
   parentNode = parentNode.Parent;
  }
  parentnode.Nodes.Add(node);
  parentnode = node;
 }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle string table