??NextRecordset?和?GetRows?大家可能用的很少!
          最近使用使用,不錯(cuò)的好東東!
          對(duì)提高批量查詢(xún),查詢(xún)紀(jì)錄集不是巨海量的情況很有效果
          NextRecordset?和?GetRows?是Recordset的兩個(gè)屬性(屬性還是方法我是常混淆是非#$#$,弄不清四下五除一)

          GetRows?--->?將recordset記錄集提取到一個(gè)二維數(shù)組中,我們對(duì)recordset數(shù)據(jù)的行為就轉(zhuǎn)移到該數(shù)組,可以早早的斷開(kāi)紀(jì)錄集,不用再使用元數(shù)據(jù)操作,rs.movnext,?while?not?rs.eof等可以省掉

          NextRecordset?---->?就是在一次提交多個(gè)查詢(xún),形成多個(gè)reordset結(jié)果集的情況下,提供一個(gè)離開(kāi)當(dāng)前工作的recordset,轉(zhuǎn)移到第二個(gè)recordset的方法!
          主要是用在多個(gè)SELECT形成的結(jié)果集的情況

          示例如下:

          dim?SQL,Rs,arrA,arrB,rowsA,rowsB

          ''======提取數(shù)據(jù)庫(kù)庫(kù)記錄====

          (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)?
          ''執(zhí)行結(jié)果將有兩個(gè)select?的結(jié)果集,當(dāng)前第一個(gè)select的recordset處于激活狀態(tài)?

          arrA=rs.GetRows?''----------取得SElECTa?Recordset的二維數(shù)組

          set?rs=rs.NextRecordset?
          ''------------最關(guān)鍵的一步,使用Nextrecordset激活下一個(gè)recordset

          arrB=rs.GetRows?''----------再次取得第二個(gè)SElECTb?Recordset的二維數(shù)組?

          Rs.close
          set?rs=nothing?''---------盡早釋放數(shù)據(jù)庫(kù)對(duì)象,關(guān)閉記錄集
          CONN.close
          set?CONN=Nothing
          這樣,我們所有關(guān)于數(shù)據(jù)庫(kù)的數(shù)據(jù)干干凈凈的提取完成,用最早的時(shí)間釋放數(shù)據(jù)庫(kù)資源?
          ''-----------//

          ''========用取得的arrA?arrB進(jìn)行頁(yè)面處理,顯示數(shù)據(jù)結(jié)果======
          ''注意,arrA=GetRows?后得到的數(shù)組,第一維是代表列,第二維代表行

          rowsA=ubound(arrA,2)?''----提取arrA的第二維下標(biāo),相當(dāng)于取得recordset?的記錄行數(shù)
          rowsB=ubound(arrB,2)?''-----同上,提取arrB的第二維下標(biāo)?

          ''做數(shù)據(jù)循環(huán):

          ''第一個(gè)select表的循環(huán)
          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>

          ''第二個(gè)select表循環(huán)
          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?''============小結(jié)========

          這樣的結(jié)果,再清楚不過(guò)!
          (1)使用Nextrecordset,可以處理多個(gè)select語(yǔ)句一次發(fā)送形成的結(jié)果集,減少網(wǎng)絡(luò)流量,必定加快速度!
          不使用NextRecordset?則會(huì)這樣操作:
          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將記錄集提取到數(shù)組中(放到內(nèi)存,所以要求記錄集不要海大啦)
          用內(nèi)存的數(shù)組工作,而且省掉EOF,movenext等的判斷,誰(shuí)更快!自不必說(shuō)!
          (3)最最主要的,我們利用上二者,一次性將所有的數(shù)據(jù)提完,快速斷開(kāi)數(shù)據(jù)庫(kù)連接和摧毀建立recordset數(shù)據(jù)庫(kù)對(duì)象,大大減少網(wǎng)絡(luò)流量!性能自然要提高很多!

          ?

          posted on 2006-05-26 13:55 jackstudio 閱讀(354) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): asp
          主站蜘蛛池模板: 济宁市| 灵山县| 额敏县| 哈巴河县| 准格尔旗| 黄骅市| 清镇市| 黄石市| SHOW| 北票市| 闽侯县| 元江| 密云县| 额济纳旗| 常熟市| 汕尾市| 定陶县| 桂平市| 分宜县| 句容市| 七台河市| 苍南县| 政和县| 青冈县| 延长县| 册亨县| 临海市| 河东区| 峨眉山市| 南昌县| 吴堡县| 运城市| 龙门县| 平顺县| 平阳县| 新兴县| 轮台县| 石楼县| 山阴县| 金山区| 宣恩县|