您的位置:首页 > 编程语言 > ASP

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

2007-08-23 12:38 666 查看
下面是存储过程(sqlserver2000下通过)


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


-- 获取指定页的数据




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) -- 主语句




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'




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




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



下面是C#的代码


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 ;


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 ;


this.fldName = fldName;


this.pagesize = pagesize ;


this.pageindex = pageindex;


this.ordertype = ordertype ;


this.strwhere = strwhere ;


this.connectionString = connectionString ;




}








/**//// <summary>


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


/// </summary>


/// <param name="tblname"></param>


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






{




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




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


}






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 ;


public string StrWhere






{




get

{return strwhere ;}




set

{strwhere =value;}


}














public IDataReader GetDataReader()






{




if(this.docount)






{


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


}








// 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),


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");


}




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),


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");


}








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),


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


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


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


);


}




}










}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: