以下是代碼片段: ’****************************************************************** ’** 本程序名:"無限流"分頁程序 ’** 作者:Arbiter(AAsx) ’** 版本:Million Level ’** ’** QQ:22222xx ’** Email:Arbiter@21cn.com ’** http://www.imagecity.org/ ’****************************************************************** ’** ’** 【作者的話】 ’** ’** 分頁程序無疑是許多網(wǎng)絡(luò)程序功能中一個(gè)比較麻煩的東西,事實(shí)上現(xiàn)在 ’** 為止絕大部分人還是在使用傳統(tǒng)的分頁方法(Rs.PageSize=xx),而了解 ’** 數(shù)據(jù)庫操作的人都知道,這種傳統(tǒng)方式有個(gè)弊端:第一次打開頁面時(shí), ’** 它會(huì)預(yù)讀所有的記錄集,這當(dāng)在數(shù)據(jù)大的時(shí)候,這將是致命的,而且接 ’** 下來的翻頁速度也會(huì)非常慢,很占用資源。對(duì)于十萬數(shù)量級(jí)以上的數(shù)據(jù) ’** 庫這種傳統(tǒng)分頁方式已經(jīng)顯得非常無力,更別說百萬級(jí)了(根本沒法操 ’** 作)?;谶@種原因,促使我做了本程序。 ’** ’** 【程序功能】 ’** ’** 針對(duì)大型的數(shù)據(jù)庫進(jìn)行分頁操作,理想的可操作的數(shù)據(jù)記錄量在200萬 ’** 以內(nèi)(Max Level版將無數(shù)量限制,且無論數(shù)據(jù)庫多大,翻頁速度都是 ’** 不變),這是Million Level版分頁程序在賽揚(yáng)1G、內(nèi)存512、win2k環(huán) ’** 境下的測(cè)試數(shù)據(jù): ’** ’** SQLserver 2k 10萬條記錄 每頁顯示20條: ’** 平均翻頁速度:45ms ’** SQLserver 2k 100萬條記錄 每頁顯示20條: ’** 平均翻頁速度:350ms ’** ’** ’** 【分頁原理】 ’** ’** 本程序不再使用Rs.PageSize的方式分頁,連接數(shù)據(jù)庫的游標(biāo)類型 ’** 也不是使用conn,1,x,而是conn,0,1,這應(yīng)是最快的游標(biāo)類型了,不要 ’** 以為這樣會(huì)使程序變得復(fù)雜,相反,程序非常簡(jiǎn)單,如果你看不明白, ’** 應(yīng)該是我的編程風(fēng)格你不習(xí)慣,而非程序復(fù)雜。 ’** "無限流"分頁的中心是:每頁只讀出需要顯示的記錄,不再象傳統(tǒng) ’** 分頁程序預(yù)讀全部的數(shù)據(jù),這正在本程序最大的優(yōu)點(diǎn)--占用資源少,同 ’** 理速度也得到非常大的提升,特別在數(shù)據(jù)量越大的時(shí)候,它的速度優(yōu)勢(shì) ’** 越明顯(100萬記錄才350ms左右)。 ’** 當(dāng)程序執(zhí)行后,使用CurcorBegin和CurcorEnd記錄顯示的第一條記 ’** 錄和最后一條記錄的ID值,作為下一次翻頁的標(biāo)記,然后利用Top xx取 ’** 出需要的數(shù)據(jù)顯示,同時(shí)又再對(duì)ID值進(jìn)行記錄。 ’** ’** 【結(jié) 言】 ’** ’** 本程序?yàn)楣蚕戆?,提供給各程序愛好者研究使用,若要轉(zhuǎn)載、散播、修 ’** 改或作其他用途,請(qǐng)尊重作者的辛勞,注明出處。 ’** 如果本程序中有錯(cuò)漏、非最優(yōu)化等缺點(diǎn),請(qǐng)到www.csdn.net的Web開發(fā)/ ’** ASP欄目中發(fā)表討論,為了中國(guó)軟件事業(yè)的發(fā)展,請(qǐng)不要固步自封:) ’** ’******************************************************************** Option Explicit ’Response.Flush Dim BeginTime,EndTime BeginTime=Timer Dim conn,SQLstr,Rs,DefRecordNum,CursorBegin,CursorEnd,CurPageNum,hav DefRecordNum=20 ’--------------獲取相關(guān)參數(shù)---------- If Request("CursorBegin")="" Then CursorBegin=0 Else CursorBegin=Request("CursorBegin") If Request("CursorEnd")="" Then CursorEnd=0 Else CursorEnd=Request("CursorEnd") If Request("CurPageNum")<>"" Then CurPageNum=CLng(Request("CurPageNum")) If CurPageNum<=0 Then CurPageNum=1 Else CurPageNum=1 End If hav=Request("hav") If hav="" Then hav="next" ’----------------End----------------- ’------------顯示翻頁內(nèi)容函數(shù)-------- Function TurnPageFS(DispRecordNum) Dim n While Not(Rs.Eof) And n<DispRecordNum n=n 1 Response.Write "<tr>"&_ "<td bgcolor=’efefef’>"&Rs(0)&"</td>"&_ "<td bgcolor=’efefef’>"&Rs(1)&"</td>"&_ "<td bgcolor=’efefef’>"&Rs(2)&"</td>"&_ "<td bgcolor=’efefef’>"&Rs(3)&"</td>"&_ "<td bgcolor=’efefef’>"&Rs(4)&"</td>"&_ "<td bgcolor=’efefef’>"&Rs(5)&"</td>"&_ "</tr>" If n=1 Then CursorBegin=Rs(0) If n=DefRecordNum Or Rs.Eof Then CursorEnd=Rs(0) Rs.MoveNext Wend End Function ’-------------連接數(shù)據(jù)庫------------- Set conn=Server.CreateObject("Adodb.Connection") ’SQLstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.Mappath("mldata.mdb") SQLstr="Driver={SQL Server};server=arbiter;uid=arbiter;pwd=123456;database=mldata" conn.Open SQLstr ’---------統(tǒng)計(jì)總記錄數(shù)/總頁數(shù)--------- ’-PS:推薦使用count(ID),ID為自動(dòng)編號(hào)且索引,否則速度有可能大打折扣 ’-PS:此統(tǒng)計(jì)是本程序中最耗資源的一部分,如果取消這段程序,速度會(huì)快上10倍左右 Dim TotalRecords,TotalPages SQLstr="Select count(ID) As RecordSum From ABC" Set Rs=conn.Execute(SQLstr,0,1) TotalRecords=Rs("RecordSum") TotalPages=Abs(Int(TotalRecords/DefRecordNum*(-1))) Rs.Close Set Rs=Nothing ’--------根據(jù)hav選擇相應(yīng)的SQL字串----- Select Case(hav) Case "back" CursorEnd=CursorBegin SQLstr="Select Top "&DefRecordNum&"_ ID,Title,FileName,K,ImgSize,NameSon _ From ABC Where ID<"&CursorBegin&_ " And ID In (Select Top "&DefRecordNum_ &" ID From ABC Where ID<"&CursorBegin_ &" Order by ID DESC) Order by ID" Case "next" SQLstr="Select Top "&DefRecordNum_ &" ID,Title,FileName,K,ImgSize,NameSon From ABC Where ID>"&CursorEnd&_ " Order by ID" End Select Set Rs=conn.Execute(SQLstr,0,1) %> 學(xué)習(xí)交流
熱門圖片
猜你喜歡的新聞
猜你喜歡的關(guān)注
新聞熱點(diǎn) 2024-04-27 13:35:46
2024-04-27 13:33:47
2024-04-24 22:53:44
2024-04-23 19:32:50
2024-04-23 19:25:50
2024-04-23 19:13:19
疑難解答 圖片精選 |