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
新聞熱點
疑難解答