日期:2014-05-17  浏览次数:20847 次

ASP.NET + SQL 分页存储过程以及对应的类

?ASP.NET + SQL 分页存储过程以及对应的类

这个类是在结合.Net动软代码生成器一起使用的,如果不用动软,则需要自己写执行存储过程的方法

?


?

using System;
using System.Data;
using System.Text;
using System.Data.SqlClient;
using Maticsoft.DBUtility;//请先添加引用
namespace DAL
{
??? /// <summary>
??? /// 数据分页访问类SP_ViewPage。
??? /// </summary>
??? public class SP_ViewPage
??? {
??????? public enum SortType
??????? {
??????????? ASC = 1,
??????????? DESC = 2,
??????????? Multinomial = 3
??????? }
??????? /// </summary>
??????? /// <param name="TableName">表名</param>
??????? /// <param name="PrimaryKey">单一主键或唯一值键</param>
??????? /// <param name="PageIndex">当前页数[当前要显示的页码]</param>
??????? /// <param name="PageSize">每页输出的记录数</param>
??????? /// <param name="FieldShow">以逗号分隔的要显示的字段列表,如果不指定,则显示所有字段</param>
??????? /// <param name="strOrder">
??????? /// 排序 不含'order by'字符,如id asc,userid desc,必须指定asc或desc 也可以不指定排序字段直接传null 或者 ''? 进来
??????? /// 注意当@SortType=3时生效,记住一定要在最后加上主键,否则会让你比较郁闷
??????? /// </param>
??????? /// <param name="strWhere">查询条件 不含'where'字符,如id>10 and len(userid)>9</param>
??????? /// <param name="TotalPageCount">返回总页数</param>
??????? /// <param name="TotalCount">记返回总记录</param>
??????? /// <returns>DataSet</returns>
????????public static DataSet GetListByPage(String TableName, String PrimaryKey, int PageIndex, int PageSize, string FieldShow,String strOrder, String strWhere, out int TotalPageCount, out int TotalCount)
??????? {
??????????? //自己创建的根据传入的参数自动进行判断是使用升序还是降序,还是多条件排序
??????????? //排序的依据
??????????? SortType sortType = SortType.DESC;
??????????? if (strOrder.Split(',').Length > 1)//多条件的
??????????? {
??????????????? sortType = SortType.Multinomial;
??????????? }
??????????? else //单个条件或者无条件的
??????????? {
??????????????? if (null == strOrder || "".Equals(strOrder))//无条件的
??????????????? {
??????????????????? sortType = SortType.DESC;
??????????????? }
??????????????? else if (strOrder.ToLower().IndexOf("asc") >= 0)
??????????????? {
??????????????????? string[] orderTemp = strOrder.ToLower().Split(' ');//使用空格分隔,确保asc不是某个字段里的字母
??????????????????? if (2 == orderTemp.Length && orderTemp[1].Equals("asc"))
??????????????????? {
??????????????????????? sortType = SortType.ASC;
??????????????????? }
??????????????? }
??????????? }
??????????? if (null == FieldShow || "".Equals(FieldShow.Trim()))
??????????? {
??????????????? FieldShow = " * ";
??????????? }
??????????? SqlParameter[] parameters = {
??????????????????? new SqlParameter("@TableName", SqlDbType.VarChar, 255), //--表名?????????
??????????????????? new SqlParameter("@FieldList", SqlDbType.VarChar, 255), //--显示列名,如果是全部字段则为*? --[至少要传个*进来]?????????
??????????????????? new SqlParameter("@PrimaryKey", SqlDbType.VarChar, 255),//--单一主键或唯一值键
??????????????????? new SqlParameter("@Where", SqlDbType.VarChar,1000),// --查询条件 不含'where'字符,如id>10 and len(userid)>9????
??????????????????? new SqlParameter("@Order", SqlDbType.VarChar,255),//--排序 不含'order by'字符,如id asc,userid desc,必须指定asc或desc 也可以不指定排序字段直接传null 或者 ''? 进来
????????????????????????????????????????????????????????????????????? //--注意当@SortType=3时生效,记住一定要在最后加上主键,否则会让你比较郁闷??
??????????????????? new SqlParameter("@SortType", SqlDbType.Int),?? //--排序规则 1:正序asc 2:倒序desc 3:多列排序方法[多列排序,必须给@Order 赋值,其他两种排序的倒无所谓]
??????????????????? new SqlParameter("@RecorderCount", SqlDbType.Int),// --记录总数 0:会返回总记录
??????????????????? new SqlParameter("@PageSize", SqlDbType.Int),// --每页输出的记录数????
??????????????????? new SqlParameter("@PageIndex", SqlDbType.Int),// --当前页数?