仓酷云

标题: ASP编程:Asp中怎样疾速分页 [打印本页]

作者: 飘飘悠悠    时间: 2015-1-16 23:36
标题: ASP编程:Asp中怎样疾速分页
ASP由于使用了COM组件所以它会变的十分强大,但是这样的强大由于WindowsNT系统最初的设计问题而会引发大量的安全问题。只要在这样的组件或是操作中一不注意,哪么外部攻击就可以取得相当高的权限而导致网站瘫痪或者数据丢失;分页克日一向在研讨怎样才干写出高小的分页算法,也许收拾了一下,思绪以下:

起首数据库里必要有一个主动编号字段(ID)。然后第一次会见的时分,掏出一切纪录,定制好每页的纪录数PageSize,盘算出页数,然后依据页数创建一个一维数组PageId(PageCount),PageId(0)保留纪录初试前提,然后对应每一个元素保留每页对应的ID界限码

1,ID界限码:假如数据库纪录ID纪录序列以下1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
假定必要依照ID按次排序的话,PageSize=5,Pagecount=4,PageId(4)
数组PageId的值分离为PageId(0)=1,PageId(1)=5,PageId(2)=10,PageId(3)=15,PageId(4)=16
当会见第i页的时分就间接找[PageId(i-1),PageId(i))之间的纪录,如许能够包管每次取的纪录都只是PageSize笔记录。
假定必要依照ID倒序分列的话,
数组PageId的值分离为PageId(0)=16,PageId(1)=12,PageId(2)=7,PageId(3)=2,PageId(4)=1,当会见第i页的时分就间接查找ID属于[PageId(i-1),PageId(i))


将数组PageId()保留在Application()中,以便会见,如许,只是第一次会见分页程序的时分便初始化Application()。代码部分以下:(上面称为新程序)

<%
Time1=Timer()
DimConn
SetConn=Server.CreateObject("Adodb.Connection")
Conn.open"Driver={MicroSoftAccessDriver(*.mdb)};Dbq="&Server.MapPath("db.mdb")

DimPage,PageCounts,PageId,PageList
DimRs,Sql
DimIsInit,i

IsInit=False标记为,用来判别Application("PageId")是不是初始化
PageList=20设置每页显现20条数据
SetRs=Server.CreateObject("Adodb.Recordset")
Page=Request.QueryString("Page")注重页码必要反省范例

IfIsEmpty(Application("PageId"))Then假如Application("PageId")还未初始化,则先辈行初始化
Response.Write("Initapp!<br>")
Sql="Select*FromtestOrderByIdDesc"假定这里是依照ID倒序分列
Rs.openSql,Conn,1,1失掉纪录集工具

IfNot(Rs.EoforRs.Bof)Then
Rs.PageSize=PageList设置每页纪录数
PageCounts=Rs.PageCount
ReDimPageId(PageCounts)从头界说数组PageId
Fori=0ToPageCounts入手下手给数组PageId()赋值
IfRs.eofThenExitFor
PageId(i)=Rs("ID")
Rs.Move(PageList)
Next
Rs.MoveLast
PageId(PageCounts)=Rs("ID")
Application.Lock()
Application("PageId")=PageId
Application.UnLock()
EndIf
Rs.Close
EndIf
IdStart=Clng(Application("PageId")(Page-1))
IdEnd=Clng(Application("PageId")(Page))
Sql="Select*fromtestwhereid<="&IdStart&"andid>"&IdEnd&""
Rs.openSql,Conn,1,1
WhileNotRs.eof
Response.Write(rs(0)&"--"&rs(1))
Rs.MoveNext
Wend
Rs.Close
SetRs=Nothing
Conn.Close
SetConn=Nothing


Fori=1ToUbound(Application("PageId"))
Response.Write("<ahref=Test1.asp?Page="&i&">"&i&"</a> ")
Next
Time2=Timer()

Response.Write("<br>"&(Time2-Time1)*1000)
Application.Contents.Remove("PageId")
%>

传统分页代码以下:(上面称为旧程序)
<%
Time1=Timer()
DimConn
SetConn=Server.CreateObject("Adodb.Connection")
Conn.open"Driver={MicroSoftAccessDriver(*.mdb)};Dbq="&Server.MapPath("db.mdb")

DimPage,PageCounts,PageList
DimRs,Sql

PageList=20
Page=Request.QueryString("Page")
SetRs=Server.CreateObject("Adodb.Recordset")
Sql="Select*fromtestorderbyiddesc"
Rs.OpenSql,Conn,1,1

IfPage=""ThenPage=1
IfNot(Rs.eofOrRs.Bof)Then
Rs.PageSize=PageList
PageCounts=Rs.PageCount
Rs.AbsolutePage=Page
EndIf

Fori=1toPageList
IfRs.eofThenExitFor
Response.Write(Rs(0)&"-----"&Rs(1)&"<br>")
Rs.MoveNext
next

Fori=1ToPageCounts
Response.Write("<ahref=Test.asp?Page="&i&">"&i&"</a> ")
Next
Time2=Timer()

Response.Write("<br>"&(Time2-Time1)*1000)
%>

实在,整体的头脑就是,创建一个Application("PageId")全局数组,每一个元素都保留页面所区纪录的ID区间,好比,Application("PageId")(0)保留第一个元素的ID,然后Application("PageId")(1)保留下一页的第一个ID…………顺次类推,当必要会见第i页的时分,就间接查找ID在[Application("PageId")(i-1),Application("i"))内里的纪录集,如许,每次只用查找必要的纪录数,而不</p>源代码保护方面其实现在考虑得没那么多了..NET也可以反编译.ASP写得复杂的话别人能看得懂的话.他也有能力自己写了.这方面担心的倒不太多.纵观现在网上可以下载的那些所谓BBS还有什么网站等等的源代码
作者: 仓酷云    时间: 2015-1-20 10:33
哪些内置对象是可以跳过的,或者哪些属性和方法是用不到的?
作者: 透明    时间: 2015-1-29 06:46
ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp),它可以看作是VC和Java的混合体吧。
作者: 飘灵儿    时间: 2015-2-5 23:32
他的语法和设计思路和VB完全相同,导致很多ASP的书都留一句“相关内容请参考VB的相关教材....”更糟糕的是,相当多的ASP教程混合了Javascript,VBscript等等脚本语言,搞的初学者。
作者: 金色的骷髅    时间: 2015-2-14 05:18
我可以结合自己的经验大致给你说一说,希望对你有所帮助,少走些弯路。
作者: 若天明    时间: 2015-3-4 04:51
我们必须明确一个大方向,不要只是停留在因为学而去学,我们应有方向应有目标.
作者: 愤怒的大鸟    时间: 2015-3-11 17:00
作为IE上广为流传的动态网页开发技术,ASP以它简单易学博得了广大WEB程序爱好这的青睐,而且它对运行环境和开发品台的不挑剔,以及有大量有效的参考手册,极大的推广了它的发展。
作者: 简单生活    时间: 2015-3-19 02:29
代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
作者: 小魔女    时间: 2015-3-27 05:11
封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变,业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2