/// <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;
}
比较通用的数据分页方法
最新推荐文章于 2024-12-08 16:13:43 发布