NextRecordset 和 GetRows 雙簧合奏

來源:互聯網
上載者:User
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資料庫物件,大大減少網路流量!效能自然要提高很多!



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。