关于海量分页的补充说明(转)

由于“bigfocus”同志一直对海量分页情有独钟,特别是长达半个多月都未对他的小小要求作出回应,自感觉十分愧疚,于是打算对曾经辉煌过的海量分页作出补充说明。

 首先海量分页方法是本人在学习ASP.NET后,以ASP版的海量分页为基础,重新设计的东东,为的是在大记录量的情况下,尽量降低SQL的负荷。那时候还不懂什么叫MVC,也不懂缓存Dataset什么的,就知道Datareader()这种东西,拿着rs.Read()写C#版的ASP,显得特天真单纯。现在看来,海量分页在当时的情况下,确实为个人发展作出了应有的贡献,但随着对ASP.NET的理解的深入,海量分页也完成了它的使命,渐渐退出了历史舞台。

       言归正传,海量分页的核心思想是“组合SQL语句,仅读取需要的记录”。我是用类似“select top N”这样的语句来取得数据的。这样带来的问题是,我得在逻辑层甚至表现层上写不少where和and这样的东西,代码杂乱缺乏美感,更糟糕的是,它难以写数据绑定(不是不能,只是很麻烦)。 

下面的代码是一张翻页列表页的实现:

                string sqlField = " ID,IndexID,Title,CreateDate";//字段
                string sqlFrom = " from UserV_Article";
                string sqlOrder = " order by isTop desc,ID desc";//排序
                string pageStr = Request["page"];//当前页数
                int pageSize = 15;//每页记录数

                string sqlWhere = " ";//当有条件时为where
                string sqlAnd = " ";//当有条件时为and
                string sqlCondition = " ";//条件
                sqlWhere = " where";
                sqlAnd = " and";
                sqlCondition = " IndexID=" + Request["IndexID"] + " and isAuditing=1 and isDel=0 and CreateDate<'" + DateTime.Now.ToString() + "'";//

                stackPage SP = new stackPage();
                int recordCount = SP.sRecordCount(sqlFrom, sqlWhere, sqlCondition);//得到总记录条数
                int pageCount = SP.sPageNum(pageSize, recordCount);//得到总页数
                int page = SP.sPageNow(pageStr, pageCount);//得到当前页号码
                int countNum = SP.sCountNum(pageSize, recordCount, page, pageCount);//得到当前页显示条数
                if (countNum==0)
                {
                    liMessage.Visible = true;
                }
                else
                {
                    SqlDataReader rsArticle = SP.sShowPage(sqlField, sqlFrom, sqlWhere, sqlAnd, sqlCondition, sqlOrder, page, recordCount, pageSize);//获得分页数据集
                    rptList.DataSource = rsArticle;
                    rptList.DataBind();
                    ViewState["pageCount"] = pageCount.ToString();
                }
主要功能是获得指定字段的记录集合,在前台生成页数。当时还不清楚如何写控件的属性,无奈的用ViewState传递页数的值,哈哈真是把人笑死了。 

下面是海量分页示例代码的内容,示例代码压缩包下载地址是:点我下载

使用方法:

1、下载了解压缩

2、www目录建立虚拟目录

3、data目录是MSSQL数据库文件,推荐使用SQL2000进行附加操作

4、配置一下web.config里的连接字符串

5、浏览的试试,如果有问题可以在这帖子下面留言提问

PS:看了示例代码希望大家不要笑我,这代码这年头看起来确实满恶心的,不过这都是我当年岁月的记载啊,特别是有朋友特别想看,我就发出来给大家瞄瞄~~~~~

处女座的人有着超级完美主义,特别是我这种代码洁癖型,对过去的代码都是超级否定的,极容易引起重构的冲动,于是在上面数落了半天海量翻页的各种弊端(虽然确实存在)。

如果大家有更好的办法进行分页什么的,欢迎一起讨论一下,嘿嘿嘿。

原文地址:https://www.cnblogs.com/Tonyyang/p/1077136.html