封裝分頁存儲過程

封裝分頁存儲過程-查詢條件相關信息的類sql

  /// <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 
相關文章
相關標籤/搜索