您的位置:首页 > 其它

熬夜写的一个分页存储过程,支持跳页

2006-05-11 01:26 330 查看
asp文件:
----------------------------------
'调用和传递参数
allCount=1000000'总数参数
pagecount=allCount/10'每页10条,总页数
if not isempty(request("page")) then
CurPage=cint(Request("page"))
else
CurPage=1
end if
if request.Form("go")<>"" then'获取跳转页数
JumpPage=request.Form("go")
CurPage=JumpPage'传给当前页
else
JumpPage=0
end if
if CurPage=pagecount then'最大页数,用于传给最后页参数
maxID=CurPage
else
maxID=0
end if
if request.QueryString("isNext")<>"" then'前页、后页的判断,1为后页,0为前页
isNext=request.QueryString("isNext")
else
isNext=null
end if
'当前页面里的第一条记录的排序字段的值
If request.QueryString("FirstID")<>"" then
FirstID=request.QueryString("FirstID")
else
FirstID=0
end if
'当前页面里的最后一条记录的排序字段的值
If request.QueryString("LastID")<>"" then
LastID=request.QueryString("LastID")
else
LastID=0
end if
PageSize=10
Set comm = Server.CreateObject("ADODB.Command")
comm.CommandText = "LinkPage" '存储过程名称
comm.CommandType =4
Set comm.ActiveConnection = conn
'定义的变量顺序位置一定要与存储过程定义的变量相同,才能对应地传值。
comm.Parameters.append comm.CreateParameter("@FirstID",3,1,4,FirstID)
comm.Parameters.append comm.CreateParameter("@LastID",3,1,4,LastID)
comm.Parameters.append comm.CreateParameter("@isNext",11,1,1,isNext)
comm.Parameters.append comm.CreateParameter("@allCount",3,1,4,allCount)
comm.Parameters.append comm.CreateParameter("@PageSize",3,1,4,PageSize)
comm.Parameters.append comm.CreateParameter("@CurPage",3,1,4,CurPage)
comm.Parameters.append comm.CreateParameter("@sortid",3,1,4,sortid)
comm.Parameters.append comm.CreateParameter("@pagecount",3,1,4,maxID)
comm.Parameters.append comm.CreateParameter("@JumpPage",3,1,4,JumpPage)

set rs=comm.Execute()

-------------------------------
存储过程:

CREATE PROCEDURE LinkPage --用于翻页的测试
--需要把排序字段放在第一列

(
@FirstID int, --当前页面里的第一条记录的排序字段的值
@LastID int, --当前页面里的最后一条记录的排序字段的值
@isNext bit=null, --true 1 :下一页;false 0:上一页
@allCount int, --返回总记录数
@pageSize int, --返回一页的记录数
@CurPage int, --页号(第几页)1:第一页;-1最后一页。
@sortid int, --获取大类ID
@pagecount int, --总页
@JumpPage int --跳转页数
)

AS

if @CurPage=1
--begin
--统计总记录数
--select @allCount=count(ProductId) from Product_test

--set @pageSize=10
--返回第一页的数据
select top 10 id,qymc,address,zycp,qyjj,name,post,phone,email,a.sortid,a.typeid,b.Typename from YellowPage a,qiang_class_2 b where a.typeid=b.typeid and a.sortid=@sortid order by id desc
--end

else if @CurPage=@pagecount

select * from (select top 10 id,qymc,address,zycp,qyjj,name,post,phone,email,a.sortid,a.typeid,b.Typename from YellowPage a,qiang_class_2 b where a.typeid=b.typeid and a.sortid=@sortid order by id ) as aa order by id desc

else if @CurPage=@JumpPage

begin
declare @sql nvarchar(1000)
set @sql='select * from (select top 10 * from ( select top '+str(@JumpPage*10)+' id,qymc,address,zycp,qyjj,name,post,phone,email,a.sortid,a.typeid,b.Typename from YellowPage a,qiang_class_2 b where a.typeid=b.typeid and a.sortid='+str(@sortid)+' order by id desc) as cc order by id ) as dd order by id desc'
exec ( @sql)
end

else

begin
if @isNext=1
--翻到下一页
select top 10 id,qymc,address,zycp,qyjj,name,post,phone,email,a.sortid,a.typeid,b.Typename from YellowPage a,qiang_class_2 b where id < @LastID and a.typeid=b.typeid and a.sortid=@sortid order by id desc

else
--翻到上一页
select * from (select top 10 id,qymc,address,zycp,qyjj,name,post,phone,email,a.sortid,a.typeid,b.Typename from YellowPage a,qiang_class_2 b where a.typeid=b.typeid and a.sortid=@sortid and id > @FirstID
order by id) as bb order by id desc

end
GO
------------------------------------------------------------
存储过程小知识:
CommandType属性表明请求的类型,取值及说明如下:
-1 表明CommandText参数的类型无法确定
1 表明CommandText是一般的命令类型
2 表明CommandText参数是一个存在的表名称
4 表明CommandText参数是一个存储过程的名称

在MyComm.CreateParameter("RETURN",2,4)中,各参数的含义如下:
第一个参数("RETURE")为参数名。参数名可以任意设定,但一般应与存储过程中声明的参数名相同。此处是返回值,我习惯上设为"RETURE";
第二个参数(2),表明该参数的数据类型,具体的类型代码请参阅ADO参考,以下给出常用的类型代码:
adBigInt: 20 ;
adBinary : 128 ;
adBoolean: 11 ;
adChar: 129 ;
adDBTimeStamp: 135 ;
adEmpty: 0 ;
adInteger: 3 ;
adSmallInt: 2 ;
adTinyInt: 16 ;
adVarChar: 200 ;
对于返回值,只能取整形,且-1到-99为保留值;
第三个参数(4),表明参数的性质,此处4表明这是一个返回值。此参数取值的说明如下:
0 : 类型无法确定; 1: 输入参数;2: 输入参数;3:输入或输出参数;4: 返回值

最后:

声明输入参数时需要5个参数,声明输出参数时需要4个参数。声明输入参数时5个参数分别为:参数名、参数数据类型、参数类型、数据长度、参数值。声明输出参数时,没有最后一个参数:参数值。
需要特别注意的是:在声明参数时,顺序一定要与存储过程中定义的顺序相同,而且各参数的数据类型、长度也要与存储过程中定义的相同。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: