读书人

从datatable中返回无极分类的路径有什

发布时间: 2012-02-01 16:58:19 作者: rapoo

从datatable中返回无极分类的路径有什么简单的办法?
有一个datatable表,其中有directoryid directoryname parentid

给任一directoryid时,要求返回该分类的完整路径,即从根分类到当前分类


我使用递归的办法,总是感觉太耗资源,有没有简单的办法?谢谢

[解决办法]
在同1个表中估计也只能用递归了。
[解决办法]
没有,用递归应该不会太耗资源,毕竟只是内存操作.
[解决办法]
最多叫循环,因为每个子目录只能有一个父目录
dim sqlConn as Data.SqlClient.SqlConnection=new Data.SqlClient.SqlConnection(strConnString)
dim myCommand as Data.SqlClient.SqlCommand=new Data.SqlClient.SqlCommand( "select * from datatable where directoryid= ' "+strDirectory+ " ' ",sqlConn)
dim sqlReader as Data.SqlClient.SqlDataReader=myCommand.ExecuteReader
dim strFullPath as string
strFullPath= " "
while sqlReader.read()
strFullPath= "\ "+sqlReader( "directoryname ")+strFullPath
myCommand.CommandText= "select * from datatable where directoryid= ' "+sqlReader( "parentid ")
sqlReader.close
sqlReader=myCommand.ExecuteReader
end while
[解决办法]
递归吧。。用DataView进行筛选数据。
[解决办法]
把direcotoryId设成下面这种格式就简单多了:

一级ID:01
二级ID:0101
三级ID:010101
四级ID:01010101
0101010101 .....
这样用类似于 where directoryId like '01% '这样的sql语句就选出某一ID的所有子ID了,子ID的前两位就是一级ID,前四位是二级ID,以次类推,当然如果一个级别的ID如果超过100个的话,可以把ID设为三位。
[解决办法]
处了递归,怕是没有什么别的方法了
[解决办法]
我的一般节点不是很多,所以就一次性把所有记录都选出来然后缓存起来,以后都从缓存的数据中取了,速度比访问数据库要快得多,如果用你现在那种设计的话,那必须用递归来取,因为你无法知道一个节点是几级节点,也就无法知道循环几次。

soodex.com速度很不错,消耗cpu厉害可能是程序的问题也可能是数据访问的问题,比如象你上面说的用了递归的话CPU利用率可能会高些。

读书人网 >asp.net

热点推荐