SQL2分查找法通用分页存储过程算法 改成.net类实现

using System;
None.gif
None.gifnamespace CountryPark.DAL
ExpandedBlockStart.gif ContractedBlock.gif dot.gif{
ExpandedSubBlockStart.gif ContractedSubBlock.gif    /** <summary>
InBlock.gif    /// PageList 的摘要说明。
ExpandedSubBlockEnd.gif    /// </summary>
InBlock.gif    public sealed class PageList
ExpandedSubBlockStart.gif ContractedSubBlock.gif     dot.gif{
InBlock.gif        static PageList()
ExpandedSubBlockStart.gif ContractedSubBlock.gif         dot.gif{
ExpandedSubBlockEnd.gif        }
InBlock.gif        
ExpandedSubBlockStart.gif ContractedSubBlock.gif        /** <summary>
InBlock.gif        /// 分页查询数据记录总数获取
InBlock.gif        /// </summary>
InBlock.gif        /// <param name="_tbName">----要显示的表或多个表的连接</param>
InBlock.gif        /// <param name="_ID">----主表的主键</param>
InBlock.gif        /// <param name="_strCondition">----查询条件,不需where</param>        
InBlock.gif        /// <param name="_Dist">----是否添加查询字段的 DISTINCT 默认0不添加/1添加</param>
ExpandedSubBlockEnd.gif        /// <returns></returns>
InBlock.gif        public static string getPageListCounts(string _tbName, string _ID, string _strCondition, int _Dist)
ExpandedSubBlockStart.gif ContractedSubBlock.gif         dot.gif{            
InBlock.gif            //---存放取得查询结果总数的查询语句                    
InBlock.gif            //---对含有DISTINCT的查询进行SQL构造
InBlock.gif            //---对含有DISTINCT的总数查询进行SQL构造
InBlock.gif            string strTmp="", SqlSelect="", SqlCounts="";
InBlock.gif            
InBlock.gif            if (_Dist == 0)
ExpandedSubBlockStart.gif ContractedSubBlock.gif             dot.gif{
InBlock.gif                SqlSelect = "SELECT ";
InBlock.gif                SqlCounts = "COUNT(*)";
ExpandedSubBlockEnd.gif            }
InBlock.gif            else
ExpandedSubBlockStart.gif ContractedSubBlock.gif             dot.gif{
InBlock.gif                SqlSelect = "SELECT DISTINCT ";
InBlock.gif                SqlCounts = "COUNT(DISTINCT "+ _ID +")";
ExpandedSubBlockEnd.gif            }
InBlock.gif            if (_strCondition == string.Empty)
ExpandedSubBlockStart.gif ContractedSubBlock.gif             dot.gif{
InBlock.gif                strTmp = SqlSelect +" @Counts="+ SqlCounts +" FROM "+ _tbName;
ExpandedSubBlockEnd.gif            }
InBlock.gif            else
ExpandedSubBlockStart.gif ContractedSubBlock.gif             dot.gif{
InBlock.gif                strTmp = SqlSelect +" @Counts="+ SqlCounts +" FROM "+ " WHERE (1=1) "+ _strCondition; 
ExpandedSubBlockEnd.gif            }
InBlock.gif            return strTmp;
ExpandedSubBlockEnd.gif        }
InBlock.gif
InBlock.gif
ExpandedSubBlockStart.gif ContractedSubBlock.gif        /** <summary>
InBlock.gif        /// 获取分页数据查询SQL dot.gif
InBlock.gif        /// </summary>
InBlock.gif        /// <param name="_tbName">----要显示的表或多个表的连接</param>
InBlock.gif        /// <param name="_fldName">----要显示的字段列表</param>
InBlock.gif        /// <param name="_PageSize">----每页显示的记录个数</param>
InBlock.gif        /// <param name="_Page">----要显示那一页的记录</param>
InBlock.gif        /// <param name="_PageCount">----查询结果分页后的总页数</param>
InBlock.gif        /// <param name="_Counts">----查询到的记录数</param>
InBlock.gif        /// <param name="_fldSort">----排序字段列表或条件(如果是多字段排列Sort指代最后一个排序字段的排列顺序(最后一个排序字段不加排序标记)--程序传参如:' SortA Asc,SortB Desc,SortC ')</param>
InBlock.gif        /// <param name="_Sort">----排序方法,0为升序,1为降序</param>
InBlock.gif        /// <param name="_strCondition">----查询条件,不需where</param>
InBlock.gif        /// <param name="_ID">----主表的主键</param>
InBlock.gif        /// <param name="_Dist">----是否添加查询字段的 DISTINCT 默认0不添加/1添加</param>
ExpandedSubBlockEnd.gif        /// <returns></returns>                                                                           
InBlock.gif        public static string getPageListSql(string _tbName, string _fldName, int _PageSize, int _Page, out int _PageCount, int _Counts, string _fldSort, int _Sort, string _strCondition, string _ID, int _Dist)
ExpandedSubBlockStart.gif ContractedSubBlock.gif         dot.gif{                
InBlock.gif            string strTmp=""; //---strTmp用于返回的SQL语句
InBlock.gif            string SqlSelect="", strSortType="", strFSortType="";   
InBlock.gif
InBlock.gif            if (_Dist == 0)
ExpandedSubBlockStart.gif ContractedSubBlock.gif             dot.gif{
InBlock.gif                SqlSelect = "SELECT ";            
ExpandedSubBlockEnd.gif            }
InBlock.gif            else
ExpandedSubBlockStart.gif ContractedSubBlock.gif             dot.gif{
InBlock.gif                SqlSelect = "SELECT DISTINCT ";                
ExpandedSubBlockEnd.gif            }
InBlock.gif
InBlock.gif            if (_Sort == 0)
ExpandedSubBlockStart.gif ContractedSubBlock.gif             dot.gif{
InBlock.gif                strFSortType = " ASC";
InBlock.gif                strSortType = " DESC";
ExpandedSubBlockEnd.gif            }
InBlock.gif            else
ExpandedSubBlockStart.gif ContractedSubBlock.gif             dot.gif{
InBlock.gif                strFSortType = " DESC";
InBlock.gif                strSortType = " ASC";
ExpandedSubBlockEnd.gif            }
InBlock.gif
InBlock.gif//            ----取得查询结果总数量-----
InBlock.gif            int tmpCounts = 1;
InBlock.gif            if (_Counts != 0)
ExpandedSubBlockStart.gif ContractedSubBlock.gif             dot.gif{
InBlock.gif                tmpCounts = _Counts;
ExpandedSubBlockEnd.gif            }
InBlock.gif//          --取得分页总数
InBlock.gif            _PageCount = (tmpCounts + _PageSize - 1)/_PageSize;
InBlock.gif            //    /**//**当前页大于总页数 取最后一页**/
InBlock.gif            if (_Page > _PageCount)
ExpandedSubBlockStart.gif ContractedSubBlock.gif             dot.gif{
InBlock.gif                _Page = _PageCount; 
ExpandedSubBlockEnd.gif            }
InBlock.gif            if (_Page <= 0)
ExpandedSubBlockStart.gif ContractedSubBlock.gif             dot.gif{
InBlock.gif                _Page = 1;
ExpandedSubBlockEnd.gif            }
InBlock.gif//          --/*-----数据分页2分处理-------*/
InBlock.gif            int pageIndex = tmpCounts/_PageSize;
InBlock.gif            int lastCount = tmpCounts%_PageSize;
InBlock.gif            if (lastCount > 0)
ExpandedSubBlockStart.gif ContractedSubBlock.gif             dot.gif{
InBlock.gif                pageIndex = pageIndex + 1;
ExpandedSubBlockEnd.gif            }
InBlock.gif            else
ExpandedSubBlockStart.gif ContractedSubBlock.gif             dot.gif{
InBlock.gif                lastCount = _PageSize;
ExpandedSubBlockEnd.gif            }
InBlock.gif            if (_strCondition == string.Empty) // --没有设置显示条件
ExpandedSubBlockStart.gif ContractedSubBlock.gif             dot.gif{
InBlock.gif                if (pageIndex < 2 || _Page <= (pageIndex/2 + pageIndex%2))  //--前半部分数据处理
ExpandedSubBlockStart.gif ContractedSubBlock.gif                 dot.gif{
InBlock.gif                    if (_Page == 1)
ExpandedSubBlockStart.gif ContractedSubBlock.gif                     dot.gif{
InBlock.gif                        strTmp = SqlSelect +" TOP "+ _PageSize +" "+ _fldName +" FROM "+ _tbName +" ORDER BY "+ _fldSort +" "+ strFSortType;
ExpandedSubBlockEnd.gif                    }
InBlock.gif                    else
ExpandedSubBlockStart.gif ContractedSubBlock.gif                     dot.gif{
InBlock.gif                        strTmp = SqlSelect +" TOP "+ _PageSize +" "+ _fldName +" FROM "+ _tbName +" WHERE "+ _ID +" <(SELECT MIN("+ _ID +") FROM ("+ SqlSelect +" TOP "+ _PageSize*(_Page-1) +" "+ _ID +" FROM "+ _tbName +
InBlock.gif                            " ORDER BY "+ _fldSort +" "+ strFSortType +") AS TBMinID) ORDER BY "+ _fldSort +" "+ strFSortType;
ExpandedSubBlockEnd.gif                    }
ExpandedSubBlockEnd.gif                }
InBlock.gif                else
ExpandedSubBlockStart.gif ContractedSubBlock.gif                 dot.gif{
InBlock.gif                    _Page = pageIndex - _Page + 1; //后半部分数据处理
InBlock.gif                    if (_Page <= 1) //--最后一页数据显示
ExpandedSubBlockStart.gif ContractedSubBlock.gif                     dot.gif{
InBlock.gif                        strTmp = SqlSelect +" * FROM ("+ SqlSelect +" TOP "+ lastCount +" "+ _fldName +" FROM "+ _tbName +" ORDER BY "+ _fldSort +" "+ strSortType +") AS TempTB"+ " ORDER BY "+ _fldSort +" "+ strFSortType;
ExpandedSubBlockEnd.gif                    }
InBlock.gif                    else
ExpandedSubBlockStart.gif ContractedSubBlock.gif                     dot.gif{
InBlock.gif                        strTmp = SqlSelect +" * FROM ("+ SqlSelect +" TOP "+ _PageSize +" "+ _fldName +" FROM "+ _tbName +
InBlock.gif                            " WHERE "+ _ID +" >(SELECT MAX("+ _ID +") FROM("+ SqlSelect +" TOP "+ (_PageSize*(_Page-2)+lastCount) +" "+ _ID +" FROM "+ _tbName +
InBlock.gif                            " ORDER BY "+ _fldSort +" "+ strSortType +") AS TBMaxID) ORDER BY "+ _fldSort +" "+ strSortType +") AS TempTB ORDER BY "+ _fldSort +" "+ strFSortType;
ExpandedSubBlockEnd.gif                    }
ExpandedSubBlockEnd.gif                }
ExpandedSubBlockEnd.gif            }
InBlock.gif            else // --有查询条件
ExpandedSubBlockStart.gif ContractedSubBlock.gif             dot.gif{
InBlock.gif                if (pageIndex < 2 || _Page <=(pageIndex/2 + pageIndex%2))//--前半部分数据处理
ExpandedSubBlockStart.gif ContractedSubBlock.gif                 dot.gif{
InBlock.gif                    if (_Page == 1)
ExpandedSubBlockStart.gif ContractedSubBlock.gif                     dot.gif{
InBlock.gif                        strTmp = SqlSelect +" TOP "+ _PageSize +" "+ _fldName +" FROM "+ _tbName +"WHERE 1=1 "+ _strCondition +" ORDER BY "+ _fldSort +" "+ strFSortType;
ExpandedSubBlockEnd.gif                    }
InBlock.gif                    else
ExpandedSubBlockStart.gif ContractedSubBlock.gif                     dot.gif{
InBlock.gif                        strTmp = SqlSelect +" TOP "+ _PageSize +" "+ _fldName +" FROM "+ _tbName +
InBlock.gif                            " WHERE "+ _ID +" <(SELECT MIN("+ _ID +") FROM ("+ SqlSelect +" TOP "+ (_PageSize*(_Page-1)) +" "+ _ID +" FROM " +_tbName +
InBlock.gif                            " WHERE 1=1 "+ _strCondition +" ORDER BY "+ _fldSort +" "+ strFSortType +") AS TBMaxID) "+ _strCondition +
InBlock.gif                            " ORDER BY "+ _fldSort +" "+ strFSortType;                            
ExpandedSubBlockEnd.gif                    }
ExpandedSubBlockEnd.gif                }
InBlock.gif                else //--后半部分数据处理
ExpandedSubBlockStart.gif ContractedSubBlock.gif                 dot.gif{
InBlock.gif                    _Page = pageIndex-_Page+1;
InBlock.gif                    if (_Page <= 1) //--最后一页数据显示
ExpandedSubBlockStart.gif ContractedSubBlock.gif                     dot.gif{
InBlock.gif                        strTmp = SqlSelect +" * FROM ("+ SqlSelect +" TOP "+ lastCount +" "+ _fldName +" FROM "+ _tbName +
InBlock.gif                            " WHERE 1=1 "+ _strCondition +" ORDER BY "+ _fldSort +" "+ strSortType +") AS TempTB ORDER BY "+ _fldSort +" "+ strFSortType;
ExpandedSubBlockEnd.gif                    }
InBlock.gif                    else
ExpandedSubBlockStart.gif ContractedSubBlock.gif                     dot.gif{   
InBlock.gif                        strTmp = SqlSelect +" * FROM ("+ SqlSelect +" TOP "+ _PageSize +" "+ _fldName +" FROM "+ _tbName +
InBlock.gif                            " WHERE "+ _ID +" >(SELECT MAX("+ _ID +") FROM("+ SqlSelect +" TOP "+ (_PageSize*(_Page-2)+ lastCount) +" "+ _ID +" FROM "+ _tbName +
InBlock.gif                            " WHERE 1=1 "+ _strCondition +" ORDER BY "+ _fldSort +" "+ strSortType +") AS TBMaxID) "+ _strCondition +
InBlock.gif                            " ORDER BY "+ _fldSort +" "+ strSortType +") AS TempTB ORDER BY "+ _fldSort +" "+ strFSortType;
ExpandedSubBlockEnd.gif                    }
ExpandedSubBlockEnd.gif                }
ExpandedSubBlockEnd.gif            }
InBlock.gif
InBlock.gif            return strTmp;
ExpandedSubBlockEnd.gif        }
ExpandedSubBlockEnd.gif    }
ExpandedBlockEnd.gif}
--以上代码是针对之前写的TOP MAX模式的分页存储过程修改
--以上分页算法对SQL SERVER 和 ACCESS同样有效

转载于:https://www.cnblogs.com/xiongeee/archive/2006/12/06/583856.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
摘 要 伴随着人才教学的关注度越来越高,对于人才的培养也是当今社会发展的最为重要的问题之一。为了进一步的进行人才的培养关工作,许多的学校或者是教育的机构逐步的开展了网络信息化的教学和和管理工作,通过信息化的手段和技术实现网络信息化的教育及管理模式,通过网络信息化的手段实现在线答题在线考试和学生信息在线的管理等操作。这样更加的快捷解决了人才培养之中的问题,也在进一步的促进了网络信息化教学方式的快速的发展工作。相较于之前的人才教育和培养工作之中,存在这许多的问题和局限性。在学生信息管理方面通过线下管理的形式进行学生信息的管理工作,在此过程之中存在着一定的局限性和低效性,往往一些突发的问题导致其中工作出现错误。导致相关的教育工作受到了一定的阻碍。在学生信息和学生成绩的管理方面,往常的教育模式之下都是采用的是人工线下的进行管理和整理工作,在这一过程之中存在这一定的不安全和低效性,面对与学生基数的越来越大,学生的信息管理也在面领着巨大的挑战,管理人员面领着巨大的学生信息的信息量,运用之前的信息管理方式往往会在统计和登记上出现错误的情况的产生,为后续的管理工作造成了一定的困难。然而通过信息化的管理方式进行对学生信息的管理不仅可以避免这些错误情况的产生还可以进一步的简化学生信息管理工作的流程,节约了大量的人力和物力的之处。在线答题系统的实现不仅给学生的信息管理工作和在线考试带来了方便也进一步的促进了教育事业信息化的发展,从而实现高效化的教学工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值