仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 790|回复: 7
打印 上一主题 下一主题

[学习教程] ASP网页设计纪录集分页

[复制链接]
柔情似水 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:48:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
使用filesystemobject,可以对服务器上的文件进行操作,浏览、复制、移动、删除等。有ado的支持,asp对数据库的操作非常得心应手。你甚至可以像使用本地数据库那样,管理远程主机上的数据库,对表格、记录进行各种操作。分页|纪录集
研讨RDS数据控件时,进修了怎样用DATAPAGESIZE来限定绑定表中显现的纪录行数。固然这是一个既好又复杂的办理办法,但其弱点是把一切数据都取到了客户端。例子中只用到了一个范围较小的数据集,但假如必要用到一个很年夜的数据集,了局会怎样?真的想把一切数据都取到客户端吗?究竟,用户每次只能看到一屏数据。
这个成绩的办理办法是引进分页的观点,每次只处置一页数据,而且只前往这一页数据,而不是全体数据。为了完成分页处置数据,必要处置与Recordset工具相干的三个属性,如表10-7所示。

可以使用AbsolutePage属性将纪录指针指向某页面中的第一笔记录,如许能够间接在页面间挪动。比方:

假如利用缺省的页面巨细10,下面的代码行则将纪录指针指向纪录集的第11笔记录。
必要侧重注重的是,页面中的纪录不是流动的,纪录的数目是流动的,但并非纪录自己。这听起来大概不太好了解,但假如回忆一下会商光标范例的第8章内容,大概会记得某些范例的光标是基于键的。实践的数据其实不会被读取到客户端,直到哀求这些数据行。如许,假如正在利用分页,而其他用户增添了新的行或删除现有的纪录,那末在页面中的实践纪录便可能会改动。
一样必要记着的是,页面中纪录的序次与纪录会合的序次是分歧的,由发生纪录集的命令来界说。纪录会合的纪录没有纪录号,因此没法断定它们在纪录会合的地位。
将分页分离到使用程序有好几种办法,个中的两种利用这些属性,第三种办法利用相似的办法,但只合用于SQLServer。
10.4.1使用ASP页面分页纪录集
第一个要会商的办法是在本章后面先容过的RDS办法的一个扩大。我们将利用RDS数据控件和URL参数,先有一个前往一组纪录的ASP页面,然后这些纪录由RDS数据控件利用。假如想引进分页,必需断定这个ASP页面只前往一个充斥数据的页面。
先研讨供应数据的ASP页面。为使其更具有天真性,同意一个包括两条信息的查询字符串传到页面中:

此时,失掉了一个充斥数据的纪录集,但仅必要一个页面。因而,必需利用AbsolutePage属性来设置想要的页面。在设置AbsolutePage属性之前,必要检测哀求的页码不是0,或不年夜于总页数。在这两种情形下,将页面设为最初一页,这由PageCount属性断定。

如今,已位于准确的页上,以是接上去的成绩就是怎样将这一页传送给客户端。为了完成这一点,只需用一个“转储”纪录集把该页中的纪录提掏出来。创立一个新的,与含无数据的纪录集不异布局的纪录集,同时将数据拷贝到新的纪录会合。
转储一个纪录集对照复杂,包含创立一个Recordset工具,设置光标地位为基于客户端。然后将字段增加到Fields汇合,利用数据纪录集为这些字段供应细节。一旦创立完字段,只需复杂地翻开纪录集,不用指定任何数据源或毗连的细节。


我们用新创立的按钮来把持分页,这些按钮挪用setPage办法,其参数断定要移到哪一页。



只管云云,这段代码存在着一个次要的成绩必要办理,由于客户其实不晓得有几页数据。能够很简单地间接哀求到最初一页数据,可是当一页页下移时,却不晓得甚么时分超越最初一页。ASP页面可以晓得,但在客户端却不可。这意味着即便ASP页面只显现最初一页,客户真个页号仍旧在延续增添。
利用自界说组件
办理后面例子中的页码成绩的一种办法是利用组件来供应数据,而不是ASP页面。这里不想举行细心的研讨,但这个观点十分相似。起首要扫除URL的细节,然后在resetData函数中利用DataSpace工具和DataFactory工具来创立一个自界说组件。
这个组件所含的代码大概与ASP页面的代码十分类似,也前往一个含无数据页的纪录集。但因为组件能够不止前往一个纪录集,以是实践上能够跟踪页的最年夜数目,这使分页变得更智能化。
10.4.2使用ADO分页
另外一个办理页码成绩的办法是利用一种出名的分页手艺。不接纳RDS数据绑定,而是在ASP页面内创立一个HTML表格。利用不异的分页办法,但其实不转储纪录集。


如今,必需设置页码。第一次显现时QueryString的值大概为空,因而缺省设为第一页。假如指定了页,那末检测是不是超越可承受的页局限。假如小于第一页就设为第一页,假如年夜于最初一页就设为最初一页。




这就是ADO分页。一个相称复杂的分页程序给出了0-15所示的了局。
这里显现的是第一页数据,因而能够看到上一页控件是不成用的。
这类办理计划给用户供应了一个较好的界面,由于控件以一种很实践的事情体例运转着。但是,仍旧存在一个成绩,向前翻页的完成使得每次哀求页面时就要翻开全部纪录集。实践上所做的全体事情是把纪录集从客户端移到了服务器。如今必需供认带宽方面是改善了,但良多哀求的纪录超越了我们所必要的。
10.4.3使用SQLServer完成纪录集分页
最初一种分页办法的完成也利用了类似的手艺,但此次是在SQLSever中处置页面。这类办法是已往创立两层客户/服务器系统经常接纳的一种办法,在这里仿佛值得从头利用。使用SQLServer的存储历程创立一个一时表,然后在存储过程当中只前往所需的纪录。在某种意义上,这有点像转储纪录集的办理办法,只是这个时分将转储移到SQLServer中。
必要办理的次要成绩是要选出哀求的页中的纪录。年夜多半干系数据库并没有纪录号的观点,因而想挑出所需的纪录对照坚苦。最复杂的办理办法是复制一个表,增添一个独一的有序的纪录号,如许就能够从复制的表中掏出所需的纪录。在SQLServer顶用IDENTITY列很简单做到这一点,但关于基表我们不克不及依附IDENTITY列,由于纪录大概会被删除,如许在编号中就会留下空白。但是,能够创立一个一时表,到场IDENDITY列,如许就可以确保按次编号。

如今,创立与基表布局不异的一时表,可是增添了分外的IDENTITY列。这里,明白地指订单个表,但也能静态地指定,同意表名由存储历程来供应。固然,静态指定表会下降存储历程的实行速率。



因而,最初就有了一个只前往一页纪录的存储历程。如今必要用一些ASP代码来使用它。
从声明变量入手下手。

不必要创立毗连工具,由于ADO会创立一个隐含的毗连。
接上去,为存储历程创立参数。第一个是前往值,保留着从存储过程当中前往的页面总数;第二个和第三个参数被传进存储历程,分离指出了哀求的页码和页面的巨细。


创立下一页和最初一页控件必要总页数,它是存储历程的前往值,因而封闭纪录集,然后从参数中掏出响应的值。

这类分页办法与后面先容的利用ASP页面分页的办法有些类似,但仍旧有一个成绩。必需创立一个含有全体基表纪录的一时表。假如基表十分年夜,即便是一个疾速的存储历程,实行起来也会很慢。特地说一下,假如同意用户对一个含有大批纪录的纪录集举行分页,那末也必需承受功能丧失。
10.4.4数据分页小结
到今朝为止,已会商了三种分歧的数据分页办法,但哪种最好取决于计划的束缚前提。
第一种办法利用RDS,为用户供应了呼应速率快的页面。由于一切的数据都在当地呆板上,不必要向服务器猎取更多的数据。但是,因为一切数据必需当即传到客户端呆板,页面加载的速率比其他页面要慢。这也是IE办理计划的一个缺点。别的两种办法能很快地将页面加载到扫瞄器,但分页则必要分外的工夫。但是,这两种办法不必要任何特别的客户端组件,好比RDS,由于表格是地道的HTML文档。
后两个办法的不同不容易发觉。用MicrosoftWebApplicationStress工具举行的严厉测试标明,转储纪录集的办法速率上稍快一点,可是区分很小。但假如安装SQLServer的呆板与Web服务器分歧,那末这类不同仍是很年夜的。因而,假如利用这两种办法中的一种,倡议最好本人实践测试一下。MicrosoftWebApplicationStress工具能够从网址http://homer.rte.microsoft.com取得。
另外一个利用SQLServer举行分页的办法是利用SQLServer光标。它相似于ADO中的光标与纪录集,同意会见从查询中取得的数据行。一个光标创立并办理SQLServer中的一个行集。利用SQL光标能从行集的一个相对地位入手下手检索数据行,因而,实际上能够创立一个只前往一页从相对地位入手下手的数据行的存储历程。不幸的是,SQL光标只同意一次会见一行数据,以是页面中的每行数据都被作为一个独自的纪录集前往。在客户端,我们就必需利用NextRecordset办法对服务器实行分外的操纵。因而,这类办法固然看上往仿佛不错,但实践上与这里先容的利用存储历程的办法比拟效力是对照低的。

只要你想学,就没什么优缺点,上面那位大哥已经把网上的评论说了,但我认为想学哪个都一样,不然它就不可能在当今时代数字艺术方面存活到今天
透明 该用户已被删除
沙发
发表于 2015-1-19 23:51:44 | 只看该作者
Response:从字面上讲是“响应”,因此这个是服务端向客户端发送东西的,例如Response.Write
活着的死人 该用户已被删除
板凳
发表于 2015-1-27 05:32:22 | 只看该作者
如何更好的使自己的东西看上去很不错等等。其实这些都不是问题的实质,我们可以在实践中不断提升自己,不断充实自己。
海妖 该用户已被删除
地板
发表于 2015-2-5 00:11:36 | 只看该作者
Server:这个表示的服务器,操作服务器的一些东西使用这个,如Server.Mappath转换服务器路径,Server.CreateObject实例化一个组件
不帅 该用户已被删除
5#
发表于 2015-2-10 23:47:22 | 只看该作者
以HTML语言整合(HTML负责界面上,ASP则负责功能上)形成一个B/S(浏览器/服务器)模式的网页程序。
山那边是海 该用户已被删除
6#
发表于 2015-3-1 18:07:42 | 只看该作者
他的语法和设计思路和VB完全相同,导致很多ASP的书都留一句“相关内容请参考VB的相关教材....”更糟糕的是,相当多的ASP教程混合了Javascript,VBscript等等脚本语言,搞的初学者。
小女巫 该用户已被删除
7#
发表于 2015-3-10 21:40:45 | 只看该作者
封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变,业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高。
愤怒的大鸟 该用户已被删除
8#
发表于 2015-3-17 10:41:07 | 只看该作者
没有坚实的理论做基础,那么我们连踏入社会第一步的资本都没有,特别对于计算机专业的学生学好专业知识是置关重要的。在这里我侧重讲一下如何学习ASP,从平时的学习过程中。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 01:08

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表