- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ADONET中实现查询结果的分页显示汇编
ADO.NET中实现查询结果的分页显示
一、问题分析:
我们利用ADO.NET进行数据库编程时,一般是将查询结果填充到DataSet的DataTable对象中,再通过与其绑定的DataGrid控件显示出来。很多时候查询结果的记录数会比较大,虽然理论上一个DataTable对象可以容,但在实际操作中,我们实在没有必要将全部记录装入DataTable,原因在于:用户肯定不会同时浏览这么多行,滚动条的出现使程序操作更繁琐,并且通过网络传输的记录太多,程序的效率也会大大降低。因此应尽量减少读取的记录数,采用分页机制:一次显示一页内容,只读取需要的记录。
在填充DataTable时,将起始记录和记录个数作为参数传递给DataAdapter的Fill方法,就能实现简单的分页效果,代码如下:
da.Fill(dt,(n-1)*10,10,订单) 读订单表的第n页(每页10行)填充dt
实际在执行时,DataAdapter仍然要读取指定记录前的所有记录(即包括前n-1页),然后放弃它们。所以该方法只适用于较小的数据表,若处理大型数据库,并不能实质上提升效率。为了更好的实现分页机制,必须编写一些灵活的SQL语句。
二、实现方法:
(订单表)
如图所示,假设有一个12条记录的数据表“订单”,按“订单ID”列排序,我们要分3页显示,每页4行,获取第1页的SQL语句很简单:
SELECT TOP 4 * FROM 订单 ORDER BY 订单ID
移到下一页的语句也很简单,假设当前正处于表的第2页,想读出后4行,这些行的订单ID值应大于当前页最后一条记录的订单ID值:
SELECT TOP 4 * FROM 订单 WHERE 订单ID8 ORDER BY 订单ID
获取最后一页的语句稍复杂一些:按反向顺序读取记录,然后选择结果中的前4行。为简化问题,我们假设表中的总记录数是每页记录数的整数倍:
SELECT TOP 4 * FROM 订单 ORDER BY 订单ID DESC
但这样得到的结果,行的顺序是反的(即按订单ID从大到小排列),所以需要颠倒这些行的顺序,我们将以上查询当作另一个正向排序查询命令的子查询:
SELECT * FROM 订单 WHERE 订单ID IN
(SELECT TOP 4 订单ID FROM 订单 ORDER BY 订单ID DESC)
ORDER BY 订单ID
假设当前页是第2页,移到上一页的语句如下,同样要将行的顺序颠倒一次:
SELECT * FROM 订单 WHERE 订单ID IN
(SELECT TOP 4 订单ID FROM 订单 WHERE 订单ID5 ORDER BY 订单ID DESC)
ORDER BY 订单ID
现在可以在Windows窗体或Web窗体中实现第一页、上一页、下一页、最后一页等按钮了,我们再添加一个“转到”按钮,实现直接显示第n页的效果。例如,显示第5页可先读取前20行,再提取结果中的后4行:
SELECT TOP 4 * FROM 订单 WHERE 订单ID IN
(SELECT TOP 20 订单ID FROM 订单 ORDER BY 订单ID)
ORDER BY 订单ID DESC
此查询的结果也是反向的,同样需要将查询结果当作另一个正向排序查询命令的子查询:
SELECT * FROM 订单 WHERE 订单ID IN
(SELECT TOP 4 订单ID FROM 订单 WHERE 订单ID IN
(SELECT TOP 20 订单ID FROM 订单 ORDER BY 订单ID)
ORDER BY 订单ID DESC)
ORDER BY 订单ID
在实际编程中,只需将每页记录数、页码、当前页首(尾)记录主键键值等替换为实际值,即可方便地编写出高效率的分页显示程序。
三、程序实例:
程序界面如图2所示。DataGrid1用于同DataTable绑定,5个按钮分别代表第一页、上一页、下一页、最后一页、转到n页功能,Label1显示当前页码,Label2显示总页数,TextBox1用于输入要转到的页码n。
为方便演示,我们以Office 2000中自带的Access数据库C:\Program Files\Microsoft Office\Office\Samples\Northwind.mdb为例,使用其中的“订单”数据表,主键为“订单ID”,共830行,每页10行。编程工具采用VB.NET,代码及注释如下:
Imports System.Data.OleDb 引用命名空间
Public Class Form1
Inhe
您可能关注的文档
- 220kV一次降压变电所电气部分初步设计汇编.doc
- 220kV变电站交底大纲(电气)汇编.doc
- 220kV临湖变电站质量通病防治措施汇编.doc
- 220kV变电站特巡方案汇编.docx
- 220kV变电站一次初步设计汇编.doc
- 220kv变电站电气一次部分初步设计p汇编.doc
- 220kV变电站电气一次部分开题报告汇编.doc
- 220kv变电站电气一次部分初步设计汇编.doc
- 220kV变电站电气部分设计任务书汇编.doc
- 220kV变电站电气设计汇编.doc
- 2025浙江温州市公用事业发展集团有限公司面向高校招聘工作人考前自测高频考点模拟试题最新.docx
- 2025年蓬安县财政局下属单位招聘备考题库附答案.docx
- 广安市农业农村局2025年公开遴选市动物卫生监督所工作人员备考题库附答案.docx
- 南昌市劳动保障事务代理中心招聘3名劳务派遣驾驶员参考题库附答案.docx
- 2025浙江绍兴市新昌县机关事业单位招用编外聘用人员36人备考题库最新.docx
- 浙江国企招聘-2025嘉兴海盐县城市投资集团有限公司招聘7人笔试备考试题附答案.docx
- 长沙银行2026校园招聘备考题库最新.docx
- 2026年度中国地震局事业单位公开招聘备考题库附答案.docx
- 2025福建省晋江圳源环境科技有限责任公司招聘6人模拟试卷附答案.docx
- 浙江国企招聘-2025温州平阳县城发集团下属房开公司招聘5人公笔试备考试题附答案.docx
原创力文档


文档评论(0)