NextRecordset和GetRows是RecordSet的两个属性对提高批量查询速度很有效果,大家可能用的很少,分享一下这两个方法的用法:
GetRows方法:将RecordSet记录集提取到一个二维数组中,我们对RecordSet数据的行为就转移到该数组,可以早早的断开纪录集,不用再使用源数据操作,rs.movnext, while not rs.eof等可以省掉。
NextRecordset方法:一次提交多个查询,形成多个RecordSet结果集的情况下,提供一个离开当前工作的RecordSet,转移到下一个RecordSet的方法。主要是用在多个select形成的结果集的情况。示例如下:
1 2 3 4 5 6 | set rs=conn.execute( "select Ca1,Ca2,Ca3,Ca4 from TableA select Cb1,Cb2,Cb3,Cb4,Cb5 from TableB" ) '执行后将产生两个select的结果集,当前第一个select的RecordSet处于激活状态。 arrA=rs.GetRows '取得第一个查询结果的二维数组 set rs=rs.NextRecordset '激活下一个RecordSet arrB=rs.GetRows '取得第二个查询结果的二维数组 set rs= nothing '释放数据库对象 |
这样,我们所有关于数据库的数据提取完成,用最早的时间释放数据库资源。
注意,GetRows方法得到的数组,第一维代表列,第二维代表行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | '第一个select表的循环 response.write( "<p>表一:</p><table>" ) For i=0 to UBound(arrA,2) response.write( "<tr>" ) response.write( "<td>字段1:" &arrA(i,0)& "</td>" ) response.write( "<td>字段2:" &arrA(i,1)& "</td>" ) response.write( "<td>字段3:" &arrA(i,2)& "</td>" ) response.write( "<td>字段4:" &arrA(i,3)& "</td>" ) response.write( "</tr>" ) Next response.write( "</table>" ) '第二个select表循环 response.write( "<p>表二:</p><table>" ) For i=0 to UBound(arrB,2) response.write( "<tr>" ) response.write( "<td>字段1:" &arrB(i,0)& "</td>" ) response.write( "<td>字段2:" &arrB(i,1)& "</td>" ) response.write( "<td>字段3:" &arrB(i,2)& "</td>" ) response.write( "<td>字段4:" &arrB(i,3)& "</td>" ) response.write( "<td>字段5:" &arrB(i,4)& "</td>" ) response.write( "</tr>" ) Next response.write( "</table>" ) |
优点:
1、使用NextRecordSet,可以处理多个select语句一次发送形成的结果集,减少网络流量,必定加快速度!
2、使用GetRows将记录集提取到数组中(内存操作,因此记录集不能太大)用内存的数组工作,而且省掉eof、MoveNext等判断,速度更快!
3、最最主要的,我们利用上二者,一次性将所有的数据提完,快速断开数据库连接和销毁建立的RecordSet数据库对象,大大减少网络流量!性能自然要提高很多!
文章来源(更多代码)请浏览:http://www.joyiu.com
新闻热点
疑难解答