用ObjectDataSource实现自定义分页的心得总结
点击次数:35 次 发布日期:2008-11-26 11:18:36 作者:源代码网
|
源代码网推荐 1、SqlDataSource是针对Sql Server的,对其他的数据库支持不够,例如在访问Oracle数据库时,要用存储过程返回结构集合SqlDataSource显得无能为力。 源代码网推荐 2、 ObjectDataSource 提供一个 TypeName 属性(而不是 ConnectionString属性),该属性指定用于执行数据操作的业务逻辑类的类名,ObjectDataSource可以通过TypeName 属性直接调用业务层的类,在多层应用中ObjectDataSource 显得很实用,而SqlDataSource要在页面上指定ConnectionString、Command,系统的层次结构被搞乱,不便于系统的维护工作。 源代码网推荐 3、ObjectDataSource 控件提供了EnablePaging属性、SelectCountMethod属性、StartRowIndexParameterName属性和 MaximumRowsParameterName属性专门支持数据源分页。 SelectCountMethod属性指定的是获取数据项总数的方法。StartRowIndexParameterName属性用于指定一个参数的名称,如程序中不特别设定,其默认参数名为startRowIndex,该参数代表该页数据项的开始行索引; MaximumRowsParameterName属性也用于指定一个参数名称,其默认参数名为maximumRows,该参数代表一页中容纳的数据项总数。SqlDataSource完全没有提供这些功能。 源代码网推荐 4、SqlDataSource只支持内存分页,而不支持数据库分页, ObjectDataSource 两者都支持,内存分页每次都检索出所有数据并将其绑定到数据绑定控件中,虽然该控件只能一页一页显示这些数据,但是所有数据其实都已经被绑定到控件上了。而数据库分页的含义是显示到哪一页就检索并绑定哪一页的数据。显然在大数据量的情况下,数据库分页的效率会高很多。 源代码网推荐 关于分页方法 源代码网推荐 很多人写分页的方法喜欢创建临时表,虽然这是一个快捷的实现方法,但这样做效率肯定很低,其实在SQL Server和Oracle中分别使用Top和ROWNUM可以很方便的使用排序,充分利用数据库服务器来做计算可以降低web服务的负担。 源代码网推荐 源代码网推荐 SQL Server的分页代码: 源代码网推荐 SelectByPage 源代码网推荐 1SET QUOTED_IDENTIFIER ON 源代码网推荐 2GO 源代码网推荐 3SET ANSI_NULLS ON 源代码网推荐 4GO 源代码网推荐 5 源代码网推荐 6 源代码网推荐 7 源代码网推荐 8ALTER proc SelectByPage(@startRowIndex int,@maximumRows int,@SortBy varchar(50)) 源代码网推荐 9as 源代码网推荐 10declare @TotalCnt int 源代码网推荐 11declare @sql varchar(8000) 源代码网推荐 12begin 源代码网推荐 13select @TotalCnt = count(*) from sys_user 源代码网推荐 14 源代码网推荐 15set @sql = "select top " + convert(varchar(20),@maximumRows) + " * from " 源代码网推荐 16set @sql = @sql + "(" 源代码网推荐 17set @sql = @sql + " select top " + convert(varchar(20),(@TotalCnt-@startRowIndex)) + " * from sys_user a " 源代码网推荐 18set @sql = @sql + " order by a." + @SortBy + " desc " 源代码网推荐 19set @sql = @sql + ") b" 源代码网推荐 20set @sql = @sql + " order by b." + @SortBy 源代码网推荐 21exec(@sql) 源代码网推荐 22--print @sql 源代码网推荐 23end 源代码网推荐 24 源代码网推荐 25 源代码网推荐 26 源代码网推荐 27GO 源代码网推荐 28SET QUOTED_IDENTIFIER OFF 源代码网推荐 29GO 源代码网推荐 30SET ANSI_NULLS ON 源代码网推荐 31GO 源代码网推荐 32 源代码网推荐 33 源代码网推荐 源代码网推荐 Oracle中的分页方法: 源代码网推荐 select_by_page 源代码网推荐 1/**//* Formatted on 2007/04/16 11:16 (Formatter Plus v4.8.8) */ 源代码网推荐 2CREATE OR REPLACE PROCEDURE diswebuser.select_by_page ( 源代码网推荐 3 p_start_page NUMBER, 源代码网推荐 4 p_page_size NUMBER, 源代码网推荐 5 p_sort_by VARCHAR2 源代码网推荐 6) 源代码网推荐 7AS 源代码网推荐 8 v_cnt INTEGER; 源代码网推荐 9 v_sql VARCHAR2 (4000); 源代码网推荐 10 v_start_index INTEGER; 源代码网推荐 11 v_end_index INTEGER; 源代码网推荐 12BEGIN 源代码网推荐 13 SELECT COUNT (*) 源代码网推荐 14 INTO v_cnt 源代码网推荐 15 FROM side_slope; 源代码网推荐 16 源代码网推荐 17 --v_start_index := (p_start_page - 1) * p_page_size + 1; 源代码网推荐 18 v_start_index := p_start_page + 1; 源代码网推荐 19 v_end_index := p_start_page + p_page_size; 源代码网推荐 20 v_sql := v_sql || "SELECT * "; 源代码网推荐 21 v_sql := v_sql || " FROM (SELECT ROWNUM AS row_id, a.* "; 源代码网推荐 22 v_sql := v_sql || " FROM side_slope a "; 源代码网推荐 23 v_sql := v_sql || " ORDER BY side_slope_id) "; 源代码网推荐 24 v_sql := 源代码网推荐 25 v_sql 源代码网推荐 26 || " WHERE row_id BETWEEN " 源代码网推荐 27 || TO_CHAR (v_start_index) 源代码网推荐 28 || " AND " 源代码网推荐 29 || TO_CHAR (v_end_index) 源代码网推荐 30 || " "; 源代码网推荐 31 v_sql := v_sql || "ORDER BY side_slope_id "; 源代码网推荐 32 DBMS_OUTPUT.put_line (v_sql); 源代码网推荐 33END; 源代码网推荐 34/ 源代码网推荐 源代码网推荐 当然在Oracle存储中返回结构集要使用ref cursor,使用Oracle的朋友一定很清楚,我在这里就不罗嗦了,那样写还得创建包,麻烦^_^,上面只是打印出了sql语句。 源代码网推荐 还望高手指点 做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。 源代码网推荐 源代码网供稿. |
