linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘网络学院网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > 开发语言 > asp.net >
栏目导栏
  php
  JSP
  ASP
  asp.net
  JAVA
  c/c++/c#
  perl
  JavaScript
  Basic
  Delphi
资料搜索
热门文章
·NetBPM工作流的一个示例:请假
·Office Web Components(OWC)绘
·asp.net正则表达式语法
·asp.net 2.0 ajax中使用PopupC
·Ado.Net读取Excel常见问题总结
·数据源为空时如何让GridView显
·如何让UpdatePanel支持文件上传
·C#.Net的常见面试试题和参考答
·asp.net ajax客户端编程+jquer
·Brettle.Web.NeatUpload.dll支
·ASP.NET使用Cookie
·ASP.NET DEMO 15: 同时支持行单
·如何使IE的后退按钮无效
·如何在ASP.NET中用OWC绘制图表
·asp.net:正确判断当前用户角色
最新文章
·Ajax Control Toolkit Animati
·讨论一下类似BlogEngine内一次
·使用CSS+SiteMap+UserControl+
·Asp.net中多彩下拉框的实现
·浅谈ASP.NET的Postback
·分清ASP.NET AJAX中的Extender
·Tip:在使用AjaxControlTookit
·有关注册DataItem的一些可能被
·IIRF(Ionic's Isapi Rewrite
·asp.net 客户端回调功能的实现
·关于控件部分的看法--读Progra
·为什么在vista上做开发
·如何封装JS和CSS文件为服务器端
·岂今我看过的最强的排序算法
·设计模式学习笔记之单件模式
Google
 
用ObjectDataSource实现自定义分页的心得总结
[ 作者:  加入时间:2007-11-20 15:11:45  来自:Linux联盟收集整理 ]
在Web应用开发中列表的分页是难免要遇到的问题,在ASP.NET 2.0中微软为我们提供了很多数据源控件,如SqlDataSource、ObjectDataSource等,它们都可以实现默认分页,但是默认分页是在内存中实现的,用户量增大时Web服务器的负担会急剧增大,在多层体系结构程序开发中,往往把分页和排序的工作交给数据库服务器来完成,在网上也能找到很多能够快速实现分页的控件,但是做为一个程序员对分页的实现还是有一定的了解比较好,如果过渡的依赖于控件,你说写出的代码独立性就很差,一般在多层 web应用开发中建议尽量使用ObjectDataSource,而不要使用SqlDataSource,因为ObjectDataSource有一下有点: JFnLinux联盟
  1、SqlDataSource是针对Sql Server的,对其他的数据库支持不够,例如在访问Oracle数据库时,要用存储过程返回结构集合SqlDataSource显得无能为力。 JFnLinux联盟
  2、 ObjectDataSource 提供一个 TypeName 属性(而不是 ConnectionString属性),该属性指定用于执行数据操作的业务逻辑类的类名,ObjectDataSource可以通过TypeName 属性直接调用业务层的类,在多层应用中ObjectDataSource 显得很实用,而SqlDataSource要在页面上指定ConnectionString、Command,系统的层次结构被搞乱,不便于系统的维护工作。 JFnLinux联盟
  3、ObjectDataSource 控件提供了EnablePaging属性、SelectCountMethod属性、StartRowIndexParameterName属性和 MaximumRowsParameterName属性专门支持数据源分页。 SelectCountMethod属性指定的是获取数据项总数的方法。StartRowIndexParameterName属性用于指定一个参数的名称,如程序中不特别设定,其默认参数名为startRowIndex,该参数代表该页数据项的开始行索引; MaximumRowsParameterName属性也用于指定一个参数名称,其默认参数名为maximumRows,该参数代表一页中容纳的数据项总数。SqlDataSource完全没有提供这些功能。 JFnLinux联盟
  4、SqlDataSource只支持内存分页,而不支持数据库分页, ObjectDataSource 两者都支持,内存分页每次都检索出所有数据并将其绑定到数据绑定控件中,虽然该控件只能一页一页显示这些数据,但是所有数据其实都已经被绑定到控件上了。而数据库分页的含义是显示到哪一页就检索并绑定哪一页的数据。显然在大数据量的情况下,数据库分页的效率会高很多。 JFnLinux联盟
  关于分页方法 JFnLinux联盟
   很多人写分页的方法喜欢创建临时表,虽然这是一个快捷的实现方法,但这样做效率肯定很低,其实在SQL Server和Oracle中分别使用Top和ROWNUM可以很方便的使用排序,充分利用数据库服务器来做计算可以降低web服务的负担。 JFnLinux联盟
   JFnLinux联盟
  SQL Server的分页代码: JFnLinux联盟
  SelectByPage JFnLinux联盟
   1SET QUOTED_IDENTIFIER ON JFnLinux联盟
   2GO JFnLinux联盟
   3SET ANSI_NULLS ON JFnLinux联盟
   4GO JFnLinux联盟
   5 JFnLinux联盟
   6 JFnLinux联盟
   7 JFnLinux联盟
   8ALTER proc SelectByPage(@startRowIndex int,@maximumRows int,@SortBy varchar(50)) JFnLinux联盟
   9as JFnLinux联盟
  10declare @TotalCnt int JFnLinux联盟
  11declare @sql varchar(8000) JFnLinux联盟
  12begin JFnLinux联盟
  13select @TotalCnt = count(*) from sys_user JFnLinux联盟
  14 JFnLinux联盟
  15set @sql = 'select top ' + convert(varchar(20),@maximumRows) + ' * from ' JFnLinux联盟
  16set @sql = @sql + '(' JFnLinux联盟
  17set @sql = @sql + ' select top ' + convert(varchar(20),(@TotalCnt-@startRowIndex)) + ' * from sys_user a ' JFnLinux联盟
  18set @sql = @sql + ' order by a.' + @SortBy + ' desc ' JFnLinux联盟
  19set @sql = @sql + ') b' JFnLinux联盟
  20set @sql = @sql + ' order by b.' + @SortBy JFnLinux联盟
  21exec(@sql) JFnLinux联盟
  22--print @sql JFnLinux联盟
  23end JFnLinux联盟
  24 JFnLinux联盟
  25 JFnLinux联盟
  26 JFnLinux联盟
  27GO JFnLinux联盟
  28SET QUOTED_IDENTIFIER OFF JFnLinux联盟
  29GO JFnLinux联盟
  30SET ANSI_NULLS ON JFnLinux联盟
  31GO JFnLinux联盟
  32 JFnLinux联盟
  33 JFnLinux联盟
   JFnLinux联盟
  Oracle中的分页方法: JFnLinux联盟
  select_by_page JFnLinux联盟
   1/**//* Formatted on 2007/04/16 11:16 (Formatter Plus v4.8.8) */ JFnLinux联盟
   2CREATE OR REPLACE PROCEDURE diswebuser.select_by_page ( JFnLinux联盟
   3 p_start_page NUMBER, JFnLinux联盟
   4 p_page_size NUMBER, JFnLinux联盟
   5 p_sort_by VARCHAR2 JFnLinux联盟
   6) JFnLinux联盟
   7AS JFnLinux联盟
   8 v_cnt INTEGER; JFnLinux联盟
   9 v_sql VARCHAR2 (4000); JFnLinux联盟
  10 v_start_index INTEGER; JFnLinux联盟
  11 v_end_index INTEGER; JFnLinux联盟
  12BEGIN JFnLinux联盟
  13 SELECT COUNT (*) JFnLinux联盟
  14 INTO v_cnt JFnLinux联盟
  15 FROM side_slope; JFnLinux联盟
  16 JFnLinux联盟
  17 --v_start_index := (p_start_page - 1) * p_page_size + 1; JFnLinux联盟
  18 v_start_index := p_start_page + 1; JFnLinux联盟
  19 v_end_index := p_start_page + p_page_size; JFnLinux联盟
  20 v_sql := v_sql || 'SELECT * '; JFnLinux联盟
  21 v_sql := v_sql || ' FROM (SELECT ROWNUM AS row_id, a.* '; JFnLinux联盟
  22 v_sql := v_sql || ' FROM side_slope a '; JFnLinux联盟
  23 v_sql := v_sql || ' ORDER BY side_slope_id) '; JFnLinux联盟
  24 v_sql := JFnLinux联盟
  25 v_sql JFnLinux联盟
  26 || ' WHERE row_id BETWEEN ' JFnLinux联盟
  27 || TO_CHAR (v_start_index) JFnLinux联盟
  28 || ' AND ' JFnLinux联盟
  29 || TO_CHAR (v_end_index) JFnLinux联盟
  30 || ' '; JFnLinux联盟
  31 v_sql := v_sql || 'ORDER BY side_slope_id '; JFnLinux联盟
  32 DBMS_OUTPUT.put_line (v_sql); JFnLinux联盟
  33END; JFnLinux联盟
  34/ JFnLinux联盟
   JFnLinux联盟
  当然在Oracle存储中返回结构集要使用ref cursor,使用Oracle的朋友一定很清楚,我在这里就不罗嗦了,那样写还得创建包,麻烦^_^,上面只是打印出了sql语句。 JFnLinux联盟
  还望高手指点 Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
无相关信息