数据库:SqlServer2000 表:tree 表结构: <%@ Language = VBScript%> <%OptionExplicit%> <% Dim oConn, oRs, sSql Dim aTree Call FillArrayFromRs() Call blTreeArray(0) Sub FillArrayFromRs() Dim s_TableName s_TableName ="tree" Call DBConnBegin() Set oRs = Server.CreateObject( "ADODB.Recordset" ) sSql ="select Id,PowerName,Layer,ParentId from "& s_TableName oRs.Open sSql, oConn, 0, 1 aTree = oRs.GetRows() 'response.write ubound(aTree, 2) oRs.Close Call DBConnEnd() End Sub Sub blTreeArray(n_ParentId) Dim row, rows Dim n_NextParentId Dim n_Space rows =UBound(aTree, 2) for row =0To rows If aTree(3, row) = n_ParentId Then for n_Space =1To aTree(2, row) Response.Write " " Next Response.Write aTree(1, row) &"<br>" n_NextParentId = aTree(0, row) blTreeArray(n_NextParentId) EndIf Next End Sub Sub DBConnBegin() ' 如果数据库对象已打开,不要再打开 IfIsObject(oConn) =TrueThenExitSub ' 你可以不需要打开数据库连接对象而直接打开记录集对象,但如果你需要打开多个记录集对象的话,效率是很低的。 ' 如果你不创建一个数据库连接对象,ADO会在每个记录集打开时自动创建一个新的数据库连接对象,就算你用的是相同的SQL语句。 Set oConn = Server.CreateObject("ADODB.Connection") OnErrorResumeNext 'Provider=SQLOLEDB.1;Server=(local);Initial Catalog =cx_soft;Integrated Security=SSPI; 'Provider=SQLOLEDB.1;Server=(local);Initial Catalog =cx_soft;Trusted_Connection=yes; oConn.Open "Provider=sqloledb.1;Data Source=(local);Initial Catalog=AspNetTest;User Id=sa;Password=;" If Err.Number >0Then ' 完全地退出正在运行的脚本 Response.End EndIf ' 创建一个记录集 End Sub Sub DBConnEnd() OnErrorResumeNext oRs.Close Set oRs =Nothing oConn.Close Set oConn =Nothing End Sub %>