您的位置:首页 > 其它

实现分页的存储过程

2008-03-29 16:14 162 查看
我们在做程序开发的时候有时候会经常要用到GridView、DataList等控件,当然GridView它本身就带有分页的功能,可是DataList的分页就没有提供,我们就不得不用代码OR存储过程来实现,然而当显示的数据量非常大的时候也有必要用到存储过程对其进行分页显示,下面是实现分页的一种方法:

以Products表进行示例:


CREATE PROCEDURE [ProcName]


(


@PageIndex INT, -- 第N页


@PageSize INT --每页的记录条数


)


AS


BEGIN


DECLARE @Sql NVARCHAR(4000)


SET @Sql='SELECT * FROM Products'


EXEC p_splitpage @sql, @PageIndex ,@PageSize,0 --调用分页的存储过程


END

执行 EXEC ProcName 1,5 就可以返回第一页的五条记录,可要注意的时,它返回了两个表,第一个为空,第二个才是查询出来的数据,对此我也不知道如何更正,所以绑定返回来的DataSet时候需要绑定第二个表的类容,如:Datalist1.DataSource = dataset.Tables[1];

下面是实现分页的存储过程:


CREATE PROCEDURE [p_splitpage]


@sql NVARCHAR(4000), --要执行的sql语句


@currentpage INT , --要显示的页码


@pagesize INT , --每页的大小


@pagecount INT OUT --总页数


AS


BEGIN


SET NOCOUNT ON


declare @p1 int


EXEC sp_cursoropen @p1 OUTPUT,@sql,@scrollopt=1,@ccopt=1,@rowcount=@pagecount OUTPUT


SELECT @pagecount=CEILING(1.0*@pagecount/@pagesize),@currentpage=(@currentpage-1)*@pagesize+1


EXEC sp_cursorfetch @p1,16,@currentpage,@pagesize


EXEC sp_cursorclose @p1


SET NOCOUNT ON


END

本代码可供参考,如果对代码有什么意见或觉得有什么不足请提出来感激不尽!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: