Asp.net 通用 万级 数据分页
2008-10-07 14:01
381 查看
source:http://www.cnblogs.com/wmj/archive/2008/10/07/1305186.html
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下载
7.后话
该说的都说了,希望对大家能有所帮助启发,还有就是此测试Demo还没有加缓存,有兴趣的朋友可以加上,欢迎大家讨论,批评,指导...
Tag标签: asp.net,oracle,分页
posted on 2008-10-07 03:02 王孟军! 阅读(1814) 评论(13) 编辑 收藏 所属分类: asp.net 、数据库开发
1、不要把别人的身份证号码弄出来,会有麻烦的。
2、分页需要的时间是多少呀?
回复 引用 查看
#2楼 2008-10-07 08:13 非空
主啊 终于换头像了
回复 引用 查看
#3楼 2008-10-07 08:29 冰の酷龙
@金色海洋(jyk)
我看到时也吓一跳。。这是哪里的啊。。
楼主不是长沙的吗?
回复 引用 查看
#4楼 2008-10-07 08:32 good man
兄弟,好东西啊,
我们项目中也用到这个哟
分页这个要想达到效率,性能等多方面的东西
的确很难哟
回复 引用 查看
#5楼 2008-10-07 08:33 Q.Lee.lulu
身份证号码网上一查就出来,地址也出来了,这个不怕吧 ?
回复 引用 查看
#6楼 2008-10-07 09:10 子逸
您的数据是真实的吗? 别吓着相关的人
回复 引用 查看
#7楼 [楼主] 2008-10-07 09:12 王孟军!
@子逸
已经处理了,GOD
回复 引用 查看
#8楼 2008-10-07 09:25 申健
网络带宽的2M是2Mb,单位是比特;实际看到的下载速度是100KB,单位是字节。
两个单位不一样。
回复 引用 查看
#9楼 2008-10-07 10:07 Duron800 [未注册用户]
@申健
应该理论上是200多KB的。100多KB就太少了。
回复 引用
#10楼 2008-10-07 11:20 Doho
个人觉得Linq to sql 最方便了,想从哪查起就从那查,要多少读多少!对于Oracle 可以采用Linq to Oracle 。
回复 引用 查看
#11楼 2008-10-07 11:51 boyrichie [未注册用户]
楼主电脑配置是多少啊
怎么这么快速
回复 引用
#12楼 2008-10-07 12:29 kes.king [未注册用户]
ORACLE的数据导出成dmp再压缩一下,41万而已,很小的。
04年用asp的时候就在用这种方式做分页了。
回复 引用
#13楼 2008-10-07 12:56 cobrayang [未注册用户]
下载不了,,,
回复 引用
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下载
7.后话
该说的都说了,希望对大家能有所帮助启发,还有就是此测试Demo还没有加缓存,有兴趣的朋友可以加上,欢迎大家讨论,批评,指导...
Tag标签: asp.net,oracle,分页
posted on 2008-10-07 03:02 王孟军! 阅读(1814) 评论(13) 编辑 收藏 所属分类: asp.net 、数据库开发
评论
#1楼 2008-10-07 08:11 金色海洋(jyk)1、不要把别人的身份证号码弄出来,会有麻烦的。
2、分页需要的时间是多少呀?
回复 引用 查看
#2楼 2008-10-07 08:13 非空
主啊 终于换头像了
回复 引用 查看
#3楼 2008-10-07 08:29 冰の酷龙
@金色海洋(jyk)
我看到时也吓一跳。。这是哪里的啊。。
楼主不是长沙的吗?
回复 引用 查看
#4楼 2008-10-07 08:32 good man
兄弟,好东西啊,
我们项目中也用到这个哟
分页这个要想达到效率,性能等多方面的东西
的确很难哟
回复 引用 查看
#5楼 2008-10-07 08:33 Q.Lee.lulu
身份证号码网上一查就出来,地址也出来了,这个不怕吧 ?
回复 引用 查看
#6楼 2008-10-07 09:10 子逸
您的数据是真实的吗? 别吓着相关的人
回复 引用 查看
#7楼 [楼主] 2008-10-07 09:12 王孟军!
@子逸
已经处理了,GOD
回复 引用 查看
#8楼 2008-10-07 09:25 申健
网络带宽的2M是2Mb,单位是比特;实际看到的下载速度是100KB,单位是字节。
两个单位不一样。
回复 引用 查看
#9楼 2008-10-07 10:07 Duron800 [未注册用户]
@申健
应该理论上是200多KB的。100多KB就太少了。
回复 引用
#10楼 2008-10-07 11:20 Doho
个人觉得Linq to sql 最方便了,想从哪查起就从那查,要多少读多少!对于Oracle 可以采用Linq to Oracle 。
回复 引用 查看
#11楼 2008-10-07 11:51 boyrichie [未注册用户]
楼主电脑配置是多少啊
怎么这么快速
回复 引用
#12楼 2008-10-07 12:29 kes.king [未注册用户]
ORACLE的数据导出成dmp再压缩一下,41万而已,很小的。
04年用asp的时候就在用这种方式做分页了。
回复 引用
#13楼 2008-10-07 12:56 cobrayang [未注册用户]
下载不了,,,
回复 引用
相关文章推荐
- Asp.net 通用万级数据分页代码[修正下载地址]
- Asp.net 通用 万级 数据分页
- Asp.net 通用万级数据分页代码[修正下载地址]
- 打造通用ASP.NET数据分页控件
- 打造通用ASP.NET数据分页控件
- 打造通用ASP.NET数据分页控件
- 打造通用ASP.NET数据分页控件
- 打造通用ASP.NET数据分页控件
- 打造通用ASP.NET数据分页控件
- AspNetAjaxPager,Asp.Net通用无刷新Ajax分页控件,支持多样式多数据绑定
- 打造通用ASP.NET数据分页控件
- 打造一个通用ASP.NET数据分页控件
- 打造通用ASP.NET数据分页控件
- 打造通用ASP.NET数据分页控件
- AspNetAjaxPager,Asp.Net通用无刷新Ajax分页控件,支持多样式多数据绑定
- 打造通用ASP.NET数据分页控件
- 打造通用ASP.NET数据分页控件
- 打造一个通用ASP.NET数据分页控件
- 【asp.net爬虫】asp.NET分页控件抓取第n页数据 javascript:__doPostBack
- Scott Mitchell 的ASP.NET 2.0数据教程之二十四:: 分页和排序报表数据