当前位置: 首页 > 图文教程 > 网络编程 > ASP > NextRecordset 和 GetRows 双簧合奏

ASP
提高SQL的执行效率的ASP的五种做法
asp的offset的一个go to page
asp中command的在单条记录时,有些字段显示为空的问题
asp,php一句话木马整理方便查找木马
asp 合并记录集并删除的sql语句
asp下循环一行多少个
asp循环行数输出函数
asp access重新开始编号
ASP生成数字相加求和的BMP图片验证码
静态页面利用JS读取cookies记住用户信息
比较详细的Asp伪静态化方法及Asp静态化探讨
asp Response.flush 实时显示进度
Asp高级故障解决以及相关代码
asp智能脏话过滤系统v1.0
ASP文件中的安全问题
Access数据库中“所有记录中均未找到搜索关键字”的解决方法
asp两组字符串数据比较合并相同数据
asp MYSQL出现问号乱码的解决方法
asp文章中随机插入网站版权文字的实现代码
ASP利用XMLHTTP实现表单提交以及cookies的发送的代码

ASP 中的 NextRecordset 和 GetRows 双簧合奏


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 135 ::
收藏到网摘: n/a

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数据库对象,大大减少网络流量!性能自然要提高很多!