比較通用的數據分頁方法

/// <summary>
        /// 分頁獲取數據(基於DataSet)
        /// </summary>
        /// <param name="PageSize">每頁顯示的記錄數</param>
        /// <param name="PageIndex">當前頁</param>
        /// <param name="FieldList">要顯示的字段,如"Name,Age" 默認爲空""(顯示全部字段)</param>
        /// <param name="strWhere">查選條件</param>
        /// <param name="strOrder">排序字段,後面指定DESC/ASC,如"CaretTime desc,id ase"</param>
        /// <param name="TotalCout">返回記錄總數</param>
        /// <param name="TableName">要查選的標的名稱</param>
        /// <param name="PrimaryKey">表的主鍵字段,可以是逗號分隔的多個字段</param>
        /// <returns></returns>
        public static DataSet ToPager(int PageSize, int PageIndex, string FieldList, string strWhere, string strOrder, out int TotalCout, string TableName, string PrimaryKey)
        {
            SqlParameter[] parameters = {
                    new SqlParameter("@TableName", SqlDbType.NVarChar, 100),            //要分頁顯示的表名
                    new SqlParameter("@PrimaryKey", SqlDbType.NVarChar, 1000),          //用於定位記錄的主鍵(惟一鍵)字段,可以是逗號分隔的多個字段
                    new SqlParameter("@PageCurrent", SqlDbType.Int),                    //要顯示的頁碼(當前頁)
                    new SqlParameter("@PageSize", SqlDbType.Int),                       //每頁的大小(記錄數) 
                    new SqlParameter("@FieldList", SqlDbType.NVarChar,1000),            //以逗號分隔的要顯示的字段列表,如果不指定,則顯示所有字段 
                    new SqlParameter("@FieldOrder", SqlDbType.NVarChar, 1000),          //以逗號分隔的排序字段列表,可以指定在字段後面指定DESC/ASC
                    new SqlParameter("@Where", SqlDbType.NVarChar, 1000),               //查詢條件
                    new SqlParameter("@RecordCount", SqlDbType.Int)                     //總記錄數
                };

            parameters[0].Value = TableName;
            parameters[1].Value = PrimaryKey;
            parameters[2].Value = PageIndex;
            parameters[3].Value = PageSize;
            parameters[4].Value = "";
            parameters[5].Value = strOrder;
            parameters[6].Value = strWhere;
            parameters[7].Direction = ParameterDirection.Output;
            DataSet ds = DbHelperSQL.RunProcedure("usp_LoadByPage2005", parameters, "ds");
            TotalCout = (int)parameters[7].Value;
            return ds;
        }

        /// <summary>
        /// 分頁獲取數據(基於泛型)
        /// </summary>
        /// <param name="PageSize">每頁顯示的記錄數</param>
        /// <param name="PageIndex">當前頁</param>
        /// <param name="FieldList">要顯示的字段,如"Name,Age" 默認爲空""(顯示全部字段)</param>
        /// <param name="strWhere">查選條件</param>
        /// <param name="strOrder">排序字段,後面指定DESC/ASC,如"CaretTime desc,id ase"</param>
        /// <param name="TotalCout">返回記錄總數</param>
        /// <param name="TableName">要查選的標的名稱</param>
        /// <param name="PrimaryKey">表的主鍵字段,可以是逗號分隔的多個字段</param>
        /// <returns></returns>
        public static IList<T> ToPagerList<T>(int PageSize,
            int PageIndex,
            string FieldList,
            string strWhere,
            string strOrder,
            out int TotalCout,
            string TableName,
            string PrimaryKey) where T : class, new()
        {
            //創建返回的集合
            IList<T> objlist = new List<T>();
            string strsql = string.Empty;
            //創建屬性的集合
            List<PropertyInfo> prlist = new List<PropertyInfo>();
            //獲得反射的入口
            Type t = typeof(T);
            //獲取所有公共屬性
            PropertyInfo[] ps = t.GetProperties();

            SqlParameter[] parameters = {
                    new SqlParameter("@TableName", SqlDbType.NVarChar, 100),            //要分頁顯示的表名
                    new SqlParameter("@PrimaryKey", SqlDbType.NVarChar, 1000),          //用於定位記錄的主鍵(惟一鍵)字段,可以是逗號分隔的多個字段
                    new SqlParameter("@PageCurrent", SqlDbType.Int),                    //要顯示的頁碼(當前頁)
                    new SqlParameter("@PageSize", SqlDbType.Int),                       //每頁的大小(記錄數) 
                    new SqlParameter("@FieldList", SqlDbType.NVarChar,1000),            //以逗號分隔的要顯示的字段列表,如果不指定,則顯示所有字段 
                    new SqlParameter("@FieldOrder", SqlDbType.NVarChar, 1000),          //以逗號分隔的排序字段列表,可以指定在字段後面指定DESC/ASC
                    new SqlParameter("@Where", SqlDbType.NVarChar, 1000),               //查詢條件
                    new SqlParameter("@RecordCount", SqlDbType.Int)                     //總記錄數
                };

            parameters[0].Value = TableName;
            parameters[1].Value = PrimaryKey;
            parameters[2].Value = PageIndex;
            parameters[3].Value = PageSize;
            parameters[4].Value = "";
            parameters[5].Value = strOrder;
            parameters[6].Value = strWhere;
            parameters[7].Direction = ParameterDirection.Output;

            using (IDataReader dr = DbHelperSQL.RunProcedure("usp_LoadByPage2005", parameters))
            {
                while (dr.Read())
                {
                    //新實例泛型
                    T obj = new T();
                    //遍歷屬性數組
                    foreach (PropertyInfo p in ps)
                    {
                        //如果不爲空,則添加數據
                        if (!(dr[p.Name] is DBNull))
                        {
                            p.SetValue(obj, dr[p.Name], null);
                        }
                        //將對應的屬性填充給對象
                    }
                    //添加對象到返回集合
                    objlist.Add(obj);
                }
            }
            TotalCout = Convert.ToInt32(parameters[7].Value);
            return objlist;
        }


發佈了40 篇原創文章 · 獲贊 57 · 訪問量 50萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章