Asp.net 通用万级数据分页代码[修正下载地址]_实用技巧

1.主题,Asp.net环境下,通用的数据分页(包括Oracle,SqlServer,DB2...)
很久以前,就想做一个通用点的数据分页组件,但苦于一直没有充足的时间,所以迟迟没有实现(当然,主要是因为有一定的难度,要处理视图状态,回传事件,自绘等...),"十一"期间,陪女朋友去了躺"湘西",白天游山玩水,晚上无事,吃吃当地的夜宵,无聊之际,google了一把Oracle的数据分页,竟然没有一个完整的关于Asp.net + Oracle数据分页的例子,要不就是有版本问题,索性决定自己弄一个.
2.环境
IDE;vs2008+asp.net2.0 or 3.0+Oracle9i
Oracle测试数据;41万多条
带宽;网通说是有2M的带宽,其实TNND只有100多KB
3.原理
利用Oracle9i的RowNum获取我们想要的数据,如图3.1

复制代码 代码如下:

public IEnumerable GetPageSqlByOracle(string sql, int startRowIndex, int maximumRows, string orderBy)
{
string sqlFormat = string.Format("select * from (select rownum rn, pageTable.* from {0} pageTable where rownum <={1}) where rn>{2}", sql, startRowIndex + maximumRows, startRowIndex);

return ydjwOracleConn.RetriveDataSet(sqlFormat).Tables[0].DefaultView;
}

startRowIndex表示开始索引,maximumRows表示要获取的每页记录数目.

然后把分页后的数据绑定到ObjectDataSource组件,如下图

    

4.效果

 

4.1 支持多排序,比如时间,比如身份证明号码等

4.2 41万多条数据

4.3 单条件查询,第一次用时1.547秒

4.4 第二次,用时1.515秒

第三次差不多,就不贴了.

4.5 看看不带条件的查询,一次把41万条数据全部查询出来使用的时间

可以看到,不带条件查询41万条数据,第一次用时1.265秒.


4.6 可以看到不带条件查询41万条数据,第二次用时1.156秒
4.7 可用SqlServer,或者Db2等数据库代替,只需要修改 图3.1获取数据的方法,其他地方不用动.
5.需要注意的地方
5.1 记得数据量上万时,一定要加索引,否则要等得"花谢花开".
5.2 ObjectDataSource的所有参数名称,一定要和绑定的方法参数名称,顺序一致.
5.3 能用缓存的,尽量用缓存
5.4 SqlServer的分页算法,就不说了,替换一下图3.1的方法就行
5.5 因为数据库文件实在太大,不方便下载,有兴趣的朋友自己弄一张表就OK,加上webconfig中的数据库连接配置
6.下载
测试Demo下载 http://xiazai.jb51.net/200810/yuanma/TestDataBindControlls.rar 【已修正】
7.后话
该说的都说了,希望对大家能有所帮助启发,还有就是此测试Demo还没有加缓存,有兴趣的朋友可以加上,欢迎大家讨论,批评,指导...

时间: 2024-07-30 15:03:11

Asp.net 通用万级数据分页代码[修正下载地址]_实用技巧的相关文章

Asp.net通用万级数据分页代码

1.主题,Asp.net环境下,通用的数据分页(包括Oracle,SqlServer,DB2...) 很久以前,就想做一个通用点的数据分页组件,但苦于一直没有充足的时间,所以迟迟没有实现(当然,主要是因为有一定的难度,要处理视图状态,回传事件,自绘等...),"十一"期间,陪女朋友去了躺"湘西",白天游山玩水,晚上无事,吃吃当地的夜宵,无聊之际,google了一把Oracle的数据分页,竟然没有一个完整的关于Asp.net + Oracle数据分页的例子,要不就是有

MVC默认路由实现分页(PagerExtend.dll下载)_实用技巧

这两天在群里有人咨询有没有现成的.net mvc分页方法,由此写了一个简单分页工具,这里简单分享下实现思路,代码,希望能对大家有些帮助,鼓励大家多造些轮子还是好的. A.效果(这里用了bootstrap的样式) B.分析,知识点 a.分页通常由一下几个属性组成(当前页,总条数,分页记录数,路由地址),由此四项基本就能实现分页了,在加上一个控制样式的参数 b.各种数字的验证,计算总页数(如果总条数和分页记录数不能整除,那么最后相除的结果再+1) c.下一页和上一下的按钮是零界点,需要判断是否是最后

asp.net分页控件使用详解【附实例下载】_实用技巧

一.说明 AspNetPager.dll这个分页控件主要用于asp.net webform网站,现将整理代码如下 二.代码 1.首先在测试页面Default.aspx页面添加引用 <%@ Register Assembly="AspNetPager" Namespace="Wuqi.Webdiyer" TagPrefix="webdiyer" %> 2.写一个Repeater列表控件用于显示数据 <asp:Repeater ID

asp.net GridView中超链接的使用(带参数)_实用技巧

方法1.使用<a>标签, 前台: 复制代码 代码如下: <a href='<%# "OrigImageShow.aspx?id=1&image_id="+Eval("ID")%>' id="tb_search" runat="server" target="_blank">  弹出  </a> <a href='Javascript:alert(

ASP.NET页面间数据传递的几种方法介绍_实用技巧

Web页面是无状态的,服务器对每一次请求都认为来自不同用户,因此,变量的状态在连续对同一页面的多次请求之间或在页面跳转时不会被保留.在用ASP.NET 设计开发一个Web系统时, 遇到一个重要的问题是如何保证数据在页面间进行正确.安全和高效地传送,Asp.net 提供了状态管理等多种技术来解决保存和传递数据问题,以下来探讨.NET 下的解决此问题的各种方法和各自的适用场合. 一.ASP.NET页面间数据传递的各种方法和分析 1.使用Querystring 方法 QueryString 也叫查询字

asp.net中Fine Uploader文件上传组件使用介绍_实用技巧

最近在处理后台数据时需要实现文件上传.考虑到对浏览器适配上采用Fine Uploader. Fine Uploader 采用ajax方式实现对文件上传.同时在浏览器中直接支持文件拖拽[对浏览器版本有要求类似IE版本必须是9或是更高的IE10].在不同浏览器中提供统一用户体验.该组件基本覆盖目前所有主流浏览器.同时没有任何第三方组件依赖.相当Clear.在服务器端已经覆盖支持了ASP.NET/ColdFusion/Java/Node.js/Perl/PHP/Python. 对上传细节类似限制文件大

asp.net cookie的操作,写入、读取与操作_实用技巧

写入: 复制代码 代码如下: HttpCookie cookie = new HttpCookie("id_admin_"); cookie.Value = model.id_admin_.ToString(); //cookie.Domain = ".sosuo8.com"; HttpContext.Current.Response.Cookies.Add(cookie); cookie = new HttpCookie("name_admin_&quo

ASP.NET中用js取CheckBoxList中值的方法实例_实用技巧

做的一些项目都比较小,而且时间紧,有好多东西都没来得急总结,趁这会还有点时间把前面项目中的用到的知识点分享下,只为以后方便使用.前台页面代码 复制代码 代码如下: <!--关键字-->    <div id="keyWordsDiv" style="border: 2px solid #6FA1D9; display: none; position: absolute;        top: 0px; left: 0px; width: 260px; he

ASP.NET笔记之 Request 、Response 与Server的使用_实用技巧

1.Request      下面做一个实例,通过Request的一些方法来判断浏览图片是不是在内部浏览,还是直接按网址浏览或者被外部使用 复制代码 代码如下: <%@ WebHandler Language="C#" Class="image_Test" %>  using System; using System.Web;  public class image_Test : IHttpHandler {      public void Proce