kur*_*_89 0 sql arrays vbscript asp-classic
我有一个2D数组,其中填充了数据库中的数据,然后在while循环中使用另一个sql查询.对于while循环中的每个项目,我使用for循环检查2d数组中的某些项目.
我如何加快速度,因为while循环中的项目在1000 - 2000项内,加载网页需要3-4秒.
这是我的2D阵列 -
'MultiDimensional Array
Dim permissionsArray()
Dim permissionsCount
connectionstring = obj_ADO.getconnectionstring
Increment = 1
set c = CreateObject("ADODB.Connection")
set r = CreateObject("ADODB.Recordset")
c.open connectionstring
SQL = "select Count(P_Name) as permissionsCount from l_objectpermission inner join A_Permission on op_permissionID = P_permissionID"
r.open SQL, c
permissionsCount = r("permissionsCount")
r.close
c.close
Set objCon = CreateObject("ADODB.Connection")
Set objRS = CreateObject("ADODB.Recordset")
objCon.Open connectionstring
SQL = "select OP_ObjectID, P_Name from l_objectpermission inner join A_Permission on op_permissionID = P_permissionID order by P_Name"
objRS.open SQL, objCon
Redim permissionsArray(2, permissionsCount)
if not objRS.EOF then
objRS.MoveFirst
while not objRS.EOF
permissionsArray(0, increment) = objRS("OP_ObjectID")
permissionsArray(1, increment) = objRS("P_Name")
objRS.MoveNext
Increment = Increment + 1
wend
objRS.close
objCon.close
end if
Run Code Online (Sandbox Code Playgroud)
在我的while循环中 -
Page_ID = objRS("P_PageID")
for i = 0 to (permissionsCount)
if permissionsArray(0, i) = Page_ID then
%>
<li style="height: 2px;">
<%=permissionsArray(1,i)%>
</li>
</br>
<%
end if
next
%>
</div></center></td>
Run Code Online (Sandbox Code Playgroud)
这是你的瓶颈:
if not objRS.EOF then
objRS.MoveFirst
while not objRS.EOF
Run Code Online (Sandbox Code Playgroud)
如果你想要的只是一个二维数组,那么你将使用Recordset.GetRows()代替
'MultiDimensional Array
Dim permissionsArray
Dim permissionsCount
connectionstring = obj_ADO.getconnectionstring
Set c = Server.CreateObject("ADODB.Connection")
Set r = Server.CreateObject("ADODB.Recordset")
r.CursorLocation = 2 'adUseServer
c.open connectionstring
c.CursorLocation = 2 'adUseServer
SQL = "select OP_ObjectID, P_Name from l_objectpermission inner join A_Permission on op_permissionID = P_permissionID order by P_Name"
Set r = Server.CreateObject("ADODB.Recordset")
r.CursorLocation = 2 'adUseServer
r.Open SQL, c, 0, 1 'adOpenForwardOnly, adLockReadOnly
If r.BOF or r.EOF Then
r.close()
Set r = Nothing
Else
permissionsArray = r.GetRows()
permissionsCount = UBound(permissionsArray, 2) + 1
r.Close()
Set r = Nothing
End If
c.Close()
Set c = Nothing
Run Code Online (Sandbox Code Playgroud)
参考文献:
http://www.learnasp.com/advice/whygetrows.asp
http://www.w3schools.com/ado/met_rs_getrows.asp
http://www.devguru.com/technologies/ado/quickref/recordset_getrows. HTML