zoukankan      html  css  js  c++  java
  • 关于海量分页的补充说明(转)

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

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

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

  • 相关阅读:
    边缘节点 如何判断CDN的预热任务是否执行完成刷新 路由追踪 近期最少使用算法
    查看恶意登录的尝试账号
    系统启动时发生了什么?
    JMS学习(五)--ActiveMQ中的消息的持久化和非持久化 以及 持久订阅者 和 非持久订阅者之间的区别与联系
    查找最近修改过的文件 并处理
    时间写入文件名 nohup 原理 Command In Background your shell may have its own version of nohup
    nohup COMMAND > FILE
    证明即程序、结论公式即程序类型
    C++学习注意
    C++标准库简介(转)
  • 原文地址:https://www.cnblogs.com/Tonyyang/p/1077136.html
Copyright © 2011-2022 走看看