比较通用的数据分页方法

/// <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;
        }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值