nextrecordset 和 getrows 大家可能用的很少!
最近使用使用,不错的好东东!
对提高批量查询,查询纪录集不是巨海量的情况很有效果
nextrecordset 和 getrows 是recordset的两个属性(属性还是方法我是常混淆是非#$#$,弄不清四下五除一)
getrows ---> 将recordset记录集提取到一个二维数组中,我们对recordset数据的行为就转移到该数组,可以早早的断开纪录集,不用再使用元数据操作,rs.movnext, while not rs.eof等可以省掉
nextrecordset ----> 就是在一次提交多个查询,形成多个reordset结果集的情况下,提供一个离开当前工作的recordset,转移到第二个recordset的方法!
主要是用在多个select形成的结果集的情况
示例如下:
dim sql,rs,arra,arrb,rowsa,rowsb
'======提取数据库库记录====
(adodb.connection 的连接部分省略,假定conn.open connstr)
sql=" select ca1,ca2,ca3,ca4 from tablea " '---------------selecta
sql=sql&" select cb1,cb2,cb3,cb4,cb5 from tableb " '-------------selectb
set rs=conn.execute(sql)
'执行结果将有两个select 的结果集,当前第一个select的recordset处于激活状态
arra=rs.getrows '----------取得selecta recordset的二维数组
set rs=rs.nextrecordset
'------------最关键的一步,使用nextrecordset激活下一个recordset
arrb=rs.getrows '----------再次取得第二个selectb recordset的二维数组
rs.close
set rs=nothing '---------尽早释放数据库对象,关闭记录集
conn.close
set conn=nothing
这样,我们所有关于数据库的数据干干净净的提取完成,用最早的时间释放数据库资源
'-----------//
'========用取得的arra arrb进行页面处理,显示数据结果======
'注意,arra=getrows 后得到的数组,第一维是代表列,第二维代表行
rowsa=ubound(arra,2) '----提取arra的第二维下标,相当于取得recordset 的记录行数
rowsb=ubound(arrb,2) '-----同上,提取arrb的第二维下标
'做数据循环:
'第一个select表的循环
response.write "<table>"
for i=0 to rowsa
response.write "<tr>
response.write "<td>"&arra(i,0)&"</td>" 'tablea.ca1
response.write "<td>"&arra(i,1)&"</td>" 'tablea.ca2
response.write "<td>"&arra(i,2)&"</td>" 'tablea.ca3
response.write "<td>"&arra(i,3)&"</td>" 'tablea.ca4
response.write "</tr>"
next
response.write "</table>
'第二个select表循环
response.write "<table>"
for i=0 to rowsb
response.write "<tr>
response.write "<td>"&arrb(i,0)&"</td>" 'tableb.cb1
response.write "<td>"&arrb(i,1)&"</td>" 'tableb.cb2
response.write "<td>"&arrb(i,2)&"</td>" 'tableb.cb3
response.write "<td>"&arrb(i,3)&"</td>" 'tableb.cb4
response.write "<td>"&arrb(i,4)&"</td>" 'tableb.cb5
response.write "</tr>"
next
response.write "</table>
'--------over
rem '============小结========
这样的结果,再清楚不过!
(1)使用nextrecordset,可以处理多个select语句一次发送形成的结果集,减少网络流量,必定加快速度!
不使用nextrecordset 则会这样操作:
sql="select ca1,ca2,ca3, ca4 from tablea "
set rs=conn.execute (sql)
sql=" select cb1,cb2,cb3,cb4,cb5 from tableb "
set rs=conn.execute (sql)
(2)使用getrows将记录集提取到数组中(放到内存,所以要求记录集不要海大啦)
用内存的数组工作,而且省掉eof,movenext等的判断,谁更快!自不必说!
(3)最最主要的,我们利用上二者,一次性将所有的数据提完,快速断开数据库连接和摧毁建立recordset数据库对象,大大减少网络流量!性能自然要提高很多!
'-----------呵呵!及时原创,初浅晦色,见谅见谅~~~~~~~v37
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器