dim sql,rs,cmd,r
sql = "Select [columns] From [table] Where [cloumns]='something' order by [columns]"
Set cmd = Server.CreateObject("Adodb.Command")
cmd.ActiveConnection = conn
cmd.CommandText = sql
Set rs = cmd.Execute
If Not rs.eof then
r = rs.getRows
end if
rs.close
Set rs = Nothing
Set cmd = Nothing
因为Command要快过直接Recordset Open,所以我们选择Command;
因为GetRows直接将所有查询结果保存到内存,不需要每次Recordset Move,所以我们选择GetRows。
以下是关于这几种方式对比的一些数据:
Access数据库保存10W条数据
通过普通的Recordset Open提取:
<%
Set conn= Server.CreateObject("ADODB.Connection")
connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("db2.mdb")
conn.Open connstr
Set rs = Server.CreateObject ("ADODB.Recordset")
sql = "Select * from people order by id desc"
rs.Open sql,conn,1,1
Do While Not rs.EOF
Response.write rs("id")&" | "
rs.MoveNext
Loop
%>
结果如下:
耗时3,250.000毫秒,总测试平均值在3秒左右
==========================================================
通过使用Command方式提取:
<%
Set conn = Server.CreateObject("ADODB.Connection")
Set cmd = Server.CreateObject("ADODB.Command")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("db2.mdb")
cmd.ActiveConnection = conn
cmd.CommandText = "Select * from people order by id desc"
Set rs = cmd.Execute
Do While Not rs.EOF
Response.write rs("id")&" | "
rs.MoveNext
Loop
%>
结果如下:
耗时2,187.500毫秒,总测试平均值在2秒左右
=========================================================
发现,以上两种均不能彻底解决执行时间漫长的问题,主要原因即是循环每次都须向数据库抽取记录(Command速度相对较快)
那么使用Command + GetRows()方法又会是一个怎样的情况呢:
<%
Set conn = Server.CreateObject("ADODB.Connection")
Set cmd = Server.CreateObject("ADODB.Command")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("db2.mdb")
cmd.ActiveConnection = conn
cmd.CommandText = "Select * from people order by id desc"
Set rs = cmd.Execute
rsArray = rs.GetRows()
For i = 0 To UBound(rsArray, 2)
Response.Write rsArray(0, i)&" | "
Next
%>
耗时187.500毫秒,总测试平均值在0.2秒左右
很明显,我们可以很明显的感觉到,在ASP中使用 Command+ GetRows的方法来 读取数据库数据是目前为止所知的具有最高 效率的方式!扩展阅读:
GetRows 方法GetRows方法能够将 Recordset 对象中的多个记录存储到内存数组中。
GetRows语法
array = recordset.GetRows( Rows, Start, Fields )
GetRows返回值
返回二维数组。
GetRows参数
Rows 可选,长整型表达式,指定要检索记录数。默认值为 adGetRowsRest (-1)。
Start 可选,字符串或长整型,计算得到在 GetRows 操作开始处的记录的书签。也可使用下列 BookmarkEnum 值。
常量 说明 AdBookmarkCurrent 从当前记录开始。 AdBookmarkFirst 从首记录开始。 AdBookmarkLast 从尾记录开始。Fields 可选,变体型,代表单个字段名、顺序位置、字段名数组或顺序位置号。ADO 仅返回这些字段中的数据。
GetRows使用说明
使用 GetRows 方法可将记录从 Recordset 复制到二维数组中。第一个下标标识字段,第二个则标识记录号。当 GetRows 方法返回数据时数组变量将自动调整到正确大小。
如果不指定 Rows 参数的值,GetRows 方法将自动检索 Recordset 对象中的所有记录。如果请求的记录比可用记录多,则 GetRows 仅返回可用记录数。
如果 Recordset 对象支持书签,则可以通过传送该记录的 Bookmark 属性值,来指定 GetRows 方法将从哪个记录开始检索数据。
如要限制 GetRows 调用返回的字段,则可以在 Fields 参数中传送单个字段名/编号或者字段名/编号数组。
在调用 GetRows 后,下一个未读取的记录成为当前记录,或者如果没有更多的记录,则 EOF 属性设置为 True。
希望本文能帮助大家学习到ASP中如何使用GetRows获得更高的数据库读取效率!