/// <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;
}
比較通用的數據分頁方法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.