ASP网站制作之经由过程 ASP 纪录举行分页
我想详细了解ASP整站代码与PSP整站代码有什么优缺点,那个更好,更安全,更用容易维护,和管理。。。分页经由过程ASP纪录举行分页J.D.Meier
目次
--------------------------------------------------------------------------------
1、简介
2、成绩
3、办理计划
4、示例代码
5、剖析
6、结论
--------------------------------------------------------------------------------
简介
在ActiveServerPages(ASP)使用程序中显现年夜型纪录集,极可能是您熟习的一个成绩。本文对此成绩及其办理计划和示例代码举行了深切切磋,这个示例代码经由复杂修正,就能够使用于您的详细情形。该示例代码被计划成服务器真个办理计划,它与扫瞄器有关。别的,我会指出您在计划本人的办理计划时必要思索的成绩。
成绩
您的查询前往了一个年夜型纪录集。必要供应一个烦琐办法来扫瞄这些了局,即在每页上只显现了局的子集。要无效的完成此项事情,必要对ActiveX(R)数据工具(ADO)和数据库怎样协同事情有深切的懂得。
办理计划
怎样将您的纪录集分红“页”,而不必年夜型的了局?所谓页,基础上就是您指定应该显现在一同的很多纪录。比方,假如您的纪录会合有100笔记录,大概每页显现10笔记录。
ADO供应了两种办法,PageSize和AbsolutePage。这些办法使您可以指定每页要显现的纪录数,和将游标定位于一页的入手下手。
翻开纪录集以后,基础步骤就是:
为该纪录集指定PageSize。它暗示每页要显现的纪录数。
指定该纪录集的AbsolutePage。这将纪录指针移到页的序列中,给定页的入手下手处。
显现纪录页。要完成这一步,您要用设置的PageSize次数轮回全部纪录集,大概直到抵达文件的开端。
示例代码
以下示例代码申明了页面创建历程。借助它,您能够创建本人的办理计划的原型。在您本人的代码中,确保要完成以下步骤:
增加毛病处置。
增加对查询前往的纪录数的限定。
用前提过滤纪录。(如,创建WHERE子句)。
利用存储历程或视图。
必定要经由过程变动毗连字符串和SQL语句来修正我的示例代码,以指向您的数据库。因为代码利用ADO常数,如adUserServer,必定要在您的Global.asa文件中援用ADOTypeLibrary,或在ASP页中包含ADOVBS.INC文件。请注重,在将项目援用设置为MicrosoftADO时,VisualInterDev(R)会为您主动天生TypeLibrary援用。
注重该示例有两种办法能够供应导航栏:
ShowNavBar。它为用户供应了带着纪录计数一同跳到指定页的办法(见)。为完成这一步,它利用了RecordCount和PageCount属性。
ShowNavBarFast。该办法不供应跳转到指定页的才能,也不供应纪录计数,但能够经由过程CacheSize属性把持取回的纪录数(见)。
PageThroughRs.Asp
<%@Language=VBScript%>
<%OptionExplicit%>
<SCRIPTLANGUAGE=VBScriptRUNAT=SERVER>
确保援用ADOTypelib或利用ADOVBS.Inc
DimiPageNum,iRowsPerPage
Main
SubMain()
Dimrst
DimsSQL,sConnString
IfRequest.QueryString("iPageNum")=""Then
iPageNum=1
Else
iPageNum=Request.QueryString("iPageNum")
iPageNum=CInt(iPageNum)
EndIf
iRowsPerPage=10
sConnString="Provider=SQLOLEDB.1;password=Xyz123;userid=WebUser;"&_
"InitialCatalog=NorthWind;DataSource=MySQLServer;"&_
"network=dbmssocn;"
以下SQL从SQL视图中检索一切列。
要优化功能:
-利用存储历程、视图或在SELECT中指定列
-利用限定前往的纪录的前提(比方,WHERE子句)
sSQL="SELECTCategoryName,ProductName,QuantityPerUnit,"
sSQL=sSQL&"UnitsInStock,Discontinued"
sSQL=sSQL&"FROM"
Setrst=GetRecords(sConnString,sSQL)
WriteTableHeaderrst
WriteTableBodyrst,iRowsPerPage,iPageNum
ShowNavBarrst
ShowFastNavBar办法不利用RecordCount
或PageCount,以是它重试的纪录数仅即是
纪录集的CacheSize指定的数目。
ShowFastNavBarrst
CleanUprst
EndSub
FunctionGetRecords(sConnString,sSQL)
Dimcnn
Dimrst
setcnn=Server.CreateObject("ADODB.CONNECTION")
cnn.ConnectionString=sConnString
nn.Open
Setrst=Server.CreateObject("ADODB.RECORDSET")
Setrst.ActiveConnection=cnn
当纪录集翻开时,adUseClient的CursorLocation
将检索一切的纪录。
adUseServer同意相沿CacheSize
rst.CursorLocation=adUseServer
在利用服务器端游标时,CacheSize
限定了取回的行数。我们将只抓取正在显现的
的纪录的数量-iRowsPerPage
rst.CacheSize=iRowsPerPage
rst.OpensSQL,,adOpenStatic,adLockReadOnly?
SetGetRecords=rst
endFunction
SubWriteTableHeader(rst)
Dimfld
Response.Write"<TABLEWIDTH=80%BORDER=1>"
Response.Write"<TR>"
创建表的列题目
ForEachfldinrst.Fields
Response.Write"<TD><B>"&fld.Name&"</B></TD>"
Next
Response.Write"</TR>"
EndSub
SubWriteTableBody(rst,iRowsPerPage,iPageNum)
DimiLoop
Dimfld
iLoop=1
rst.PageSize=iRowsPerPage
rst.AbsolutePage=iPageNum
写出纪录确当前页
DoWhile(Notrst.EOF)and(iLoop<=iRowsPerPage)
Response.Write"<TR>"
ForEachfldinrst.Fields
Response.Write"<TD>"&fld.value&"</TD>"
Next
iLoop=iLoop+1
rst.MoveNext
Response.Write"</TR>"
Loop
Response.Write"</TABLE>"
EndSub
SubShowNavBar(rst)
DimiPageCount
DimiLoop
DimsScriptName
本版本供应了更丰厚的用户导航,可是
依附于RecordCount和PageCount,
它抵消了为服务器端游标
指定CacheSize的优点。
Response.Write"<BR><BR>"
sScriptName=Request.ServerVariables("SCRIPT_NAME")
IfiPageNum>1Then
Response.Write"<ahref="&sScriptName&"?iPageNum="
Response.Write(iPageNum-1)&"><<Previous</a>"
EndIf
iPageCount=rst.PageCount
DoUntiliLoop>iPageCount
fiLoop=iPageNumThen
Response.Write"<B>"&CStr(iLoop)&"</B>"
Else
Response.Write"<ahref="&sScriptName&"?iPageNum="&_
Cstr(iLoop)&">"&iLoop&"</a>"
EndIf
iLoop=iLoop+1
Loop
IfNotrst.EOFThen
Response.Write"<ahref="&sScriptName&"?iPageNum="
Response.Write(iPageNum+1)&">Next>></a><BR>"
Else
Response.Write"<BR>"
EndIf
Response.Write"Page"&iPageNum&"of"&iPageCount&"<BR>"
Response.Writerst.RecordCount&"Records"?
EndSub
SubShowFastNavBar(rst)
DimiPageCount
DimiLoop
DimsScriptName
在指定CacheSize和利用服务器端游标时,
该办法出格无效,由于它不利用RecordCount
和PageCount。必要用户具有履历。
Response.Write"<BR><BR>"
sScriptName=Request.ServerVariables("SCRIPT_NAME")
IfiPageNum>1Then
Response.Write"<ahref="&sScriptName&"?iPageNum="
Response.Write(iPageNum-1)&"><<Previous</a>"
EndIf
IfNotrst.EOFThen
Response.Write"<ahref="&sScriptName&"?iPageNum="
Response.Write(iPageNum+1)&">Next>></a><BR>"
Else
Response.Write"<BR>"
EndIf
Response.Write"Page"&iPageNum
EndSub
SubCleanUp(rst)
IfNotrstIsNothingthen
Ifrst.state=adStateOpenthenrst.close
setrst=nothing
EndIf
EndSub
</SCRIPT>
剖析
计划分页办理计划时,需注重的几个成绩:
游标定位成绩。假如利用客户端游标,每次翻开纪录集时,将读取一切的纪录。因而,因为读取了一切的纪录,今后会见RecordCount或PageCount属性时将很快。假如您利用服务器端游标,将只检索必要的纪录。您能够经由过程CacheSize属性指定一主要读取的纪录数来进步功能。但是,假如您利用服务器端游标,和RecordCount或PageCount属性,则将读取一切的纪录,功能得不到进步。必需在具有更多信息和更丰厚导航的用户界面,与检索一切纪录的功能影响之间折中。
利用服务器端游标时,CursorType属性必需是adOpenStatic或adOpenKeyset,才干利用分页。
分页并不是老是最好的用户页面。它大概仅合用于用户正从搜刮引擎扫描了局或扫瞄产物目次的情形。
试将纪录分类,以使更相干的纪录呈现在前几页中(比方,利用SQL的ORDERBY子句)。用户所能做的就这么多。
只检索必要显现的列(即,制止SELECT*)。
只检索必要显现的纪录。确保过滤的前提(即,利用WHERE子句)。
以下是必要切记的几点提醒:
将您的逻辑封装在办法中。利用办法可将暗示逻辑和数据会见逻辑分别,这就简化了将代码装进Windows剧本组件、VisualBasic剧本编纂(VBScript)类或组件的事情。改动功效更简单了,代码保护也得以改善。测试和调试也因能够正文和作废正文办法挪用而失掉改善。
与包含ADOVBS.INC比拟,援用ADO的TypeLibrary是更好的办理计划。这是由于ASP在处置包括文件时,是将全部文件读进内存,而不是只读进它必要的部分。
结论
分页是一项通用手艺,很多Web使用程序用它来供应扫瞄大批纪录的好办法。在计划分页办理计划时,必要思索一些成绩,如,怎样检索纪录,必要供应甚么范例的用户导航。只管最好的办理计划取决于您的详细的使用程序,利用本文中的手艺将匡助您作出更好的计划决议
asp,你就只能等着微软给你解决,它不乐意你就只好悲催。而且asp跑在windows服务器上,windows服务器跟linux比起来简直弱爆了! ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp),它可以看作是VC和Java的混合体吧。 Server:这个表示的服务器,操作服务器的一些东西使用这个,如Server.Mappath转换服务器路径,Server.CreateObject实例化一个组件 还有如何才能在最短的时间内学完?我每天可以有效学习2小时,双休日4小时。 我想问如何掌握学习节奏(先学什么再学什么)最好详细点? 以HTML语言整合(HTML负责界面上,ASP则负责功能上)形成一个B/S(浏览器/服务器)模式的网页程序。 下面简单介绍一下我学习ASP的方法,希望对想学习ASP的朋友有所帮助... 那么,ASP.Net有哪些改进呢? 那么,ASP.Net有哪些改进呢? 他的语法和设计思路和VB完全相同,导致很多ASP的书都留一句“相关内容请参考VB的相关教材....”更糟糕的是,相当多的ASP教程混合了Javascript,VBscript等等脚本语言,搞的初学者。 以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。
页:
[1]