ASP教程之关于存储历程分页
源代码保护方面其实现在考虑得没那么多了..NET也可以反编译.ASP写得复杂的话别人能看得懂的话.他也有能力自己写了.这方面担心的倒不太多.纵观现在网上可以下载的那些所谓BBS还有什么网站等等的源代码存储历程|分页看了几个伴侣写的关于存储历程分页的文章,感到有点成绩。starleee和西方蜘蛛但愿我能宣布点意见,我复杂说一下。起首是allsky的谁人分页办法基本就不建立,看看他是如许的:
select@iStart=(@iPage-1)*@iPageSize
select@iEnd=@iStart+@iPageSize+1
也就是说,他的入手下手和停止id依照每页显现数硬算出来的,想要这类办法建立必需满意如许一个前提,即这个论坛只要一个版面,而且id从1入手下手是一连的,两头不克不及有距离,也就是说假如删贴了的话那就会堕落。
其次是starleee谁人,实在思绪是对的,但既然用求首尾id的办法分页,就没有需要用游标,能够使用selecttop*或setrowcount=的语法来求出首尾id,第一种办法只能用在sqlserver里,尔后一种在sybase和oracle里都能建立。
starleee提到说实验过这类办法不如用游标快,实在成绩出在他的索引建的欠好,没有专门为这个存储历程创建索引。影响数据库效力最年夜的要素就是索引,在这里有需要讲一下。实际上假如一个排序的第一个字段的索引不克不及过滤失落年夜部分数据,那末这个索引就是不得当的,如许将大概有些流畅,据个例子来讲吧:
selectid,name,forumidfromtablexxxwhereforumid=1andnamelike%aaa%orderbyid
看看上边这条语句,假如想要高效,就必要为它创建如许一个索引:
forumid,id
如许说把,假如在一个有百万条记录的表顶用这条语句,假如不建这个索引,最年夜的多是要超时,而创建上述索引,假如有满意前提的记录的话,那能够在1秒钟内呼应(选出第一条切合前提的记录),而假如没有满意前提的记录,也能够在一分钟内呼应。
上面这个存储历程是我的bbs使用求首尾id的办法分页的,人人能够看一下
/*************************************************************************/
/**/
/*procedure:up_GetTopicList*/
/**/
/*Description:贴子列表*/
/**/
/*Parameters:@a_intForumID:版面id*/
/*@a_intPageNo:页号*/
/*@a_intPageSize:每页显现数,以根贴为准*/
/**/
/*Usetable:bbs,forum*/
/**/
/*Author:bigeagle@163.net*/
/**/
/*Date:2000/2/14*/
/**/
/*History:*/
/**/
/*************************************************************************/
ifexists(select*fromsysobjectswhereid=object_id(up_GetTopicList))
dropprocup_GetTopicList
go
createprocup_GetTopicList
@a_intForumIDint,
@a_intPageNoint,
@a_intPageSizeint
as
/*界说部分变量*/
declare@intBeginIDint
declare@intEndIDint
declare@intRootRecordCountint
declare@intPageCountint
declare@intRowCountint
/*封闭计数*/
setnocounton
/*检测是不是有这个版面*/
ifnotexists(select*fromforumwhereid=@a_intForumID)
return(-1)
/*求统共根贴数*/
select@intRootRecordCount=count(*)frombbswherefatherid=0andforumid=@a_intForumID
if(@intRootRecordCount=0)--假如没有贴子,则前往零
return0
/*判别页数是不是准确*/
if(@a_intPageNo-1)*@a_intPageSize>@intRootRecordCount
return(-1)
/*求入手下手rootID*/
set@intRowCount=(@a_intPageNo-1)*@a_intPageSize+1
/*限定条数*/
setrowcount@intRowCount
select@intBeginID=rootidfrombbswherefatherid=0andforumid=@a_intForumID
orderbyiddesc
/*停止rootID*/
set@intRowCount=@a_intPageNo*@a_intPageSize
/*限定条数*/
setrowcount@intRowCount
select@intEndID=rootidfrombbswherefatherid=0andforumid=@a_intForumID
orderbyiddesc
/*恢复体系变量*/
setrowcount0
setnocountoff
selecta.id,a.layer,a.forumid,a.subject,a.faceid,a.hits,a.time,a.UserID,a.fatherid,a.rootid,
Bytes=datalength(a.content),b.UserName,b.Email,b.HomePage,b.Signature,b.Point
frombbsasajoinBBSUserasbona.UserID=b.ID
whereForumid=@a_intForumIDanda.rootidbetween@intEndIDand@intBeginID
orderbya.rootiddesc,a.ordernumdesc
return(@@rowcount)
--select@@rowcount
go
</p>楼上说交互性不好,太牵强了吧。在微软提供的一套框架中,利用asp做网站,开发效率高,使用人数少,减少不必要的开销。交互性是互动方式,是有开发人员决定的。 Application:这个存储服务端的数据,如果不清除,会直到web应用程序结束才清除(例如重启站点) 不是很难但是英文要有一点基础网上的教程很少有系统的详细的去买书吧,另不用专门学习vb关于vbscript脚本在asp教材都有介绍 ASP也是这几种脚本语言中最简单易学的开发语言。但ASP也是这几种语言中唯一的一个不能很好支持跨平台的语言。 因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。 Server:这个表示的服务器,操作服务器的一些东西使用这个,如Server.Mappath转换服务器路径,Server.CreateObject实例化一个组件 Application:这个存储服务端的数据,如果不清除,会直到web应用程序结束才清除(例如重启站点) 代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。 我们必须明确一个大方向,不要只是停留在因为学而去学,我们应有方向应有目标. ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp),它可以看作是VC和Java的混合体吧。
页:
[1]