请教一个递归算法问题
在数据库中,有如下一张表 
 dwdm            dwmc                                    sjdwdm 
 1                  1单位                                          0 
 2                  2号单位                                    1 
 3                  3号单位                                    1 
 4                  2号下级单位                        2 
 5                  3号下级单位                        3 
 6                  2号下级单位子单位      4 
 ~~~~~~~~~~~~~~ 
 就这样无限的分下去 
 从表中看出,我们的根节点是   dwdm为1。 
 那么,我想请教各位,如何获得软件登录单位下的所有单位。 
 请各位指教~
------解决方案--------------------建议加一个字符型编码字段 
 dwdm    dwmc            sjdwdm  编码 
 1      1单位              0       1 
 2      2号单位            1       12 
 3      3号单位            1       13   
 4      2号下级单位        2       124 
 5      3号下级单位        3       135 
 6      2号下级单位子单位  4       1246   
 对编码字段用LIKE操作符,很容易得到各级子单位
------解决方案--------------------建议加一个字符型编码字段 
 dwdm    dwmc            sjdwdm  编码 
 1      1单位              0       1 
 2      2号单位            1       12 
 3      3号单位            1       13  
 ..... 
 100    100单位            1       这里怎么表示???如何与其他区分?    
 n      2号下级单位        2       124     
 楼上方法不好把。如果数量巨大,你怎么编码     
------解决方案--------------------public void InitDW(string strDWPID,ref DataTable dtData,ref DataTable dtObject) 
 { 
      foreach (DataRow dr in dtData.Rows) 
      { 
          if (dr[ "dwdm "].ToString().Trim() == strDWPID) 
          { 
              DataRow drObject = dtObject.NewRow(); 
              dr.ItemArray.CopyTo(drObject.ItemArray); 
              dtObject.Rows.Add(drObject); 
              drObject.AcceptChanges; 
              InitDW(dr[ "sjdwdm "].ToString().Trim(),ref dtData,ref dtObject); 
           } 
      } 
 }   
 dtData :将你的所有数据读出来形成一个DataTable 
 dtObject :将你读取出来的表copy个副本,清空数据   
 调用时 需要InitDW( "1 ",ref dtData,ref dtObject)     
 我就手写了一个 没有数据也没有测试阿
------解决方案--------------------    递归算法   
 //id是父结点编号 (如果需要生成树的话,传参数加个node类型) 
 Private GetChild (Int ID) 
 { 
     select * from 表 where 父结点编号(sjdwdm) = ID 
     将数据集放在dataset中, 
     if (ds.tables[0].Rows.Count== 0) 
     { 
          return; 
      } 
     for (i = 0 ; i  <= ds.tables[0].Rows.Count -1 ; i++) 
     { 
        //递归 
        Private GetChild (ds.tables[0].Rows[i][ "dwdm "]); 
       //定义node,进行绑定,或者返回东西之类 
     }    
 }     
 以上只是个基本框架,lz填充把   
 如果追求效率,lz可以把select 部分换成dataView过滤,传值的时候,加个dataView就可以 
 这样可以只select一次,内存中递归查找
------解决方案--------------------不会  帮顶
------解决方案--------------------那就只能遍历了