zoukankan      html  css  js  c++  java
  • 封装分页存储过程

    封装分页存储过程-查询条件相关信息的类

      /// <summary>
        /// 封装分页存储过程-查询条件相关信息的类
        /// </summary>
        public class PageCriteria
        {
            private string _TableName;
            public string TableName
            {
                get { return _TableName; }
                set { _TableName = value; }
            }
    
            private string _Fileds = "*";
            public string Fields
            {
                get { return _Fileds; }
                set { _Fileds = value; }
            }
    
            private string _PrimaryKey = "ID";
            public string PrimaryKey
            {
                get { return _PrimaryKey; }
                set { _PrimaryKey = value; }
            }
    
            private int _PageSize = 10;
            public int PageSize
            {
                get { return _PageSize; }
                set { _PageSize = value; }
            }
    
            private int _CurrentPage = 1;
            public int CurrentPage
            {
                get { return _CurrentPage; }
                set { _CurrentPage = value; }
            }
    
            private string _Sort = string.Empty;
            public string Sort
            {
                get { return _Sort; }
                set { _Sort = value; }
            }
    
            private string _Condition = string.Empty;
            public string Condition
            {
                get { return _Condition; }
                set { _Condition = value; }
            }
    
        }
    

      分页数据结果

      /// <summary>
        /// 分页数据结果
        /// </summary>
        [DataContract(Name = "Paged{0}List")]
        public class PagedList<T>
        {
            #region 构造函数
    
            public PagedList()
            {
                this.CurrentPageItems = new List<T>();
            }
            public PagedList(IEnumerable<T> currentPageItems, int pageIndex, int totalItemCount)
            {
                this.CurrentPageItems = currentPageItems;
                this.TotalItemCount = totalItemCount;
                this.CurrentPageIndex = pageIndex;
    
            }
            #endregion
    
            /// <summary>
            /// 当前页
            /// </summary>
            [DataMember]
            public int CurrentPageIndex { get; set; }
    
            /// <summary>
            /// 记录总条数
            /// </summary>
            [DataMember]
            public int TotalItemCount { get; set; }
    
            /// <summary>
            /// 总页数
            /// </summary>
            [DataMember]
            public int TotalPageCount { get; set; }
    
            /// <summary>
            /// 结果集
            /// </summary>
            [DataMember]
            public IEnumerable<T> CurrentPageItems { get; set; }
    
        }
    

      存储过程

    USE [DSUserCenter]
    GO
    /****** Object:  StoredProcedure [dbo].[ProcGetPageData]    Script Date: 2017/5/22 9:22:15 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    
    
    
    
    
    
    ALTER PROCEDURE [dbo].[ProcGetPageData] 
    ( @TableName VARCHAR(2000), --表名,多表是请使用 tA a inner join tB b On a.AID = b.AID 
    @PrimaryKey NVARCHAR(100), --主键,可以带表头 a.AID 
    @Fields NVARCHAR(2000) = '*',--读取字段 
    @Condition NVARCHAR(3000) = '',--Where条件 
    @CurrentPage INT = 1, --开始页码 
    @PageSize INT = 10, --页大小 
    @Sort NVARCHAR(200) = '', --排序字段 
    @RecordCount INT = 0 OUT 
    ) 
    AS 
    DECLARE @strWhere VARCHAR(2000) 
    DECLARE @strsql NVARCHAR(3900) 
    IF @Condition IS NOT NULL AND len(ltrim(rtrim(@Condition)))>0 
    BEGIN 
    SET @strWhere = ' WHERE 1=1 ' + @Condition + ' ' 
    END 
    ELSE 
    BEGIN 
    SET @strWhere = '' 
    END 
     
    IF (charindex(ltrim(rtrim(@PrimaryKey)),@Sort)=0) 
    BEGIN 
    IF(@Sort='') 
    SET @Sort = @PrimaryKey + ' DESC ' 
    ELSE 
    SET @Sort = @Sort+ ' , '+@PrimaryKey + ' DESC ' 
    END 
    SET @strsql = 'SELECT @RecordCount = Count(1) FROM ' + @TableName + @strWhere 
    EXECUTE sp_executesql @strsql ,N'@RecordCount INT output',@RecordCount OUTPUT 
    IF @CurrentPage = 1 --第一页提高性能 
    BEGIN 
    SET @strsql = 'SELECT TOP ' + str(@PageSize) +' '+@Fields 
    + ' FROM ' + @TableName + ' ' + @strWhere + ' ORDER BY '+ @Sort 
    END 
    ELSE 
    BEGIN 
    /* Execute dynamic query */ 
    DECLARE @START_ID NVARCHAR(50) 
    DECLARE @END_ID NVARCHAR(50) 
    SET @START_ID = CONVERT(NVARCHAR(50),(@CurrentPage-1) * @PageSize + 1) 
    SET @END_ID = CONVERT(NVARCHAR(50),@CurrentPage * @PageSize) 
    SET @strsql = ' SELECT * 
    FROM (SELECT ROW_NUMBER() OVER(ORDER BY '+@Sort+') AS rownum, 
    '+@Fields+ ' 
    FROM '+@TableName + @strWhere +') AS XX 
    WHERE rownum BETWEEN '+@START_ID+' AND ' +@END_ID +' ORDER BY XX.rownum ASC' 
    END 
    print @strsql
    EXEC(@strsql) 
    RETURN 
    

      

  • 相关阅读:
    修改器 $set 设置某个键的值 ,修改器 $unset 删除某个键
    修改器 $inc 增加和减少
    IIS 7.5 Express配置文件解析
    MongoDB 安装
    GUID 字符串,16位字符串,19位数字
    MongoDB Shell 学习
    数组修改器 $push $ne ($addToSet $each ) $pop $pull
    但行好事,莫问前程!
    gitlab使用过程中的需求与解决
    [其它] 为什么中国的程序员技术偏低
  • 原文地址:https://www.cnblogs.com/shanshanlaichi/p/6888000.html
Copyright © 2011-2022 走看看