??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數據庫對象,大大減少網絡流量!性能自然要提高很多!
?
posted on 2006-05-26 13:55
jackstudio 閱讀(349)
評論(0) 編輯 收藏 所屬分類:
asp