asp.net利用存储过程分页代码

下面是存储过程(sqlserver2000下通过)

字串7

--最通用的分页存储过程

-- 获取指定页的数据

CREATE PROCEDURE Pagination

@tblName varchar(255), -- 表名

@strGetFields varchar(1000) = '*', -- 需要返回的列

@fldName varchar(255)='', -- 排序的字段名

@PageSize int = 10, -- 页尺寸

@PageIndex int = 1, -- 页码

@doCount bit = 0, -- 返回记录总数, 非 0 值则返回

@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序

@strWhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where)

AS

declare @strSQL varchar(5000) -- 主语句 字串2

declare @strTmp varchar(110) -- 临时变量

declare @strOrder varchar(400) -- 排序类型

if @doCount != 0

begin

if @strWhere !=''

set @strSQL = 'select count(*) as Total from ['+ @tblName +'] where '+ @strWhere

else

set @strSQL = 'select count(*) as Total from ['+ @tblName +']'

end

--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都

--是@doCount为0的情况

else

begin

if @OrderType != 0

begin

set @strTmp = '<(select min'

字串5

set @strOrder = ' order by ['+ @fldName +'] desc'

--如果@OrderType不是0,就执行降序,这句很重要!

end

else

begin

set @strTmp = '>(select max'

set @strOrder = ' order by ['+ @fldName +'] asc'

end

if @PageIndex = 1

begin

if @strWhere != ''

set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['+ @tblName +'] where ' + @strWhere + ' ' + @strOrder

else

set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['+ @tblName +'] '+ @strOrder

--如果是第一页就执行以上代码,这样会加快执行速度

end

字串1

else

begin

--以下代码赋予了@strSQL以真正执行的SQL代码

set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from [' + @tblName +'] where [' + @fldName + ']' + @strTmp + '(['+ @fldName + '])

from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['+ @fldName + '] from ['+ @tblName +']' + @strOrder + ') as tblTmp)'+ @strOrder

if @strWhere != ''

set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['+ @tblName +'] where [' + @fldName + ']' + @strTmp + '(['+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['+ @fldName + ']

from ['+ @tblName +'] where ' + @strWhere + ' ' + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder

end

end

exec ( @strSQL)

GO

字串6

字串2

下面是C#的代码 字串7

using System.Data ;

using System.Data.SqlClient ;

using Microsoft.ApplicationBlocks.Data ;

using System.Web ;

using System.Web.UI ;

namespace RssLayer.PageHelper

{

/**//// <summary>

/// 分页类PagerHelper 的摘要说明。

/// </summary>

public class PagerHelper

{

private string connectionString;

public PagerHelper(string tblname,string sortname,bool docount,string connectionString)

{

this.tblName = tblname;

this.fldName = sortname ;

this.connectionString = connectionString ;

字串7

this.docount = docount;

}

public PagerHelper(string tblname,bool docount,

string strGetFields, string fldName,int pagesize,

int pageindex,bool ordertype,string strwhere,string connectionString

)

{

this.tblName = tblname ;

this.docount = docount ;

this.strGetFields = strGetFields ;

字串3

this.fldName = fldName;

this.pagesize = pagesize ;

this.pageindex = pageindex;

this.ordertype = ordertype ;

this.strwhere = strwhere ;

this.connectionString = connectionString ;

}

/**//// <summary>

/// 得到记录集的构造函数

/// </summary>

/// <param name="tblname"></param> 字串6

/// <param name="strwhere"></param>

/// <param name="connectionString"></param>

public PagerHelper(string tblname,string strwhere,string connectionString)

{

this.tblName = tblname;

this.strwhere = strwhere ;

this.docount = true;

this.connectionString = connectionString ;

}

private string tblName;

public string TblName

字串2

{

get{return tblName;}

set{tblName =value;}

}

private string strGetFields="*";

public string StrGetFields

{

get{return strGetFields ;}

set{strGetFields =value;}

}

private string fldName=string.Empty;

public string FldName

{

get{return fldName ;} 字串2

set{fldName =value;}

}

private int pagesize =10;

public int PageSize

{

get{return pagesize ;}

set{pagesize =value;}

}

private int pageindex =1;

public int PageIndex

{

get{return pageindex ;}

set{pageindex =value;} 字串8

}

private bool docount=false;

public bool DoCount

{

get{return docount ;}

set{docount =value;}

}

private bool ordertype=false;

public bool OrderType

{

get{return ordertype ;}

set{ordertype =value;}

}

private string strwhere=string.Empty ;

字串5

public string StrWhere

{

get{return strwhere ;}

set{strwhere =value;}

}

public IDataReader GetDataReader()

{

if(this.docount)

{

throw new ArgumentException("要返回记录集,DoCount属性一定为false");

}

字串8

// System.Web.HttpContext.Current.Response.Write(pageindex);

return SqlHelper.ExecuteReader(connectionString,CommandType.StoredProcedure,"Pagination",

new SqlParameter("@tblName",this.tblName),

new SqlParameter("@strGetFields",this.strGetFields),

new SqlParameter("@fldName",this.fldName),

new SqlParameter("@PageSize",this.pagesize),

new SqlParameter("@PageIndex",this.pageindex), 字串2

new SqlParameter("@doCount",this.docount),

new SqlParameter("@OrderType",this.ordertype),

new SqlParameter("@strWhere",this.strwhere)

);

}

public DataSet GetDataSet()

{

if(this.docount)

{

throw new ArgumentException("要返回记录集,DoCount属性一定为false");

字串4

}

return SqlHelper.ExecuteDataset(connectionString,CommandType.StoredProcedure,"Pagination",

new SqlParameter("@tblName",this.tblName),

new SqlParameter("@strGetFields",this.strGetFields),

new SqlParameter("@fldName",this.fldName),

new SqlParameter("@PageSize",this.pagesize),

new SqlParameter("@PageIndex",this.pageindex), 字串6

new SqlParameter("@doCount",this.docount),

new SqlParameter("@OrderType",this.ordertype),

new SqlParameter("@strWhere",this.strwhere)

);

}

public int GetCount()

{

if(!this.docount)

{

throw new ArgumentException("要返回总数统计,DoCount属性一定为true"); 字串4

}

return (int)SqlHelper.ExecuteScalar(connectionString,CommandType.StoredProcedure,"Pagination",

new SqlParameter("@tblName",this.tblName),

new SqlParameter("@strGetFields",this.strGetFields),

new SqlParameter("@fldName",this.fldName),

new SqlParameter("@PageSize",this.pagesize),

new SqlParameter("@PageIndex",this.pageindex), 字串1

new SqlParameter("@doCount",this.docount),

new SqlParameter("@OrderType",this.ordertype),

new SqlParameter("@strWhere",this.strwhere)

);

}

}

}