请教一个关于存储过程分页的问题

linnchord 2004-08-27 01:05:57
--列出所有新闻(分页参数 当前页数/每页记录数 返回记录总数)
CREATE PROC [dbo].[ProcListNews]
@page INT,
@pageSize INT
AS
DECLARE @beginId INT, @endId INT, @pageBegin INT, @pageEnd INT, @xtmp INT, @count INT

SELECT @count=(SELECT COUNT(*) countx FROM News )

--声明游标
DECLARE fastRead CURSOR SCROLL FOR SELECT ID FROM News ORDER BY PostTime desc

OPEN fastRead

SELECT @beginId=(@page-1)*@pageSize+1
SELECT @endId = @beginId+@pageSize-1

FETCH ABSOLUTE @beginId FROM fastRead INTO @pageBegin

IF @endId > @count
FETCH LAST FROM fastRead INTO @pageEnd
ELSE
FETCH ABSOLUTE @endId FROM fastRead into @pageEnd

--切换大小 between语句中排在前位的必须是较小数字
IF @pageBegin>@pageEnd
BEGIN
SELECT @xtmp=@pageBegin
SELECT @pageBegin=@pageEnd
SELECT @pageEnd=@xtmp
END

SELECT News.ID,Title,Content,Url,[Name] CategoryName,PostTime
FROM News JOIN NewsCategory c ON CategoryID=c.ID
WHERE News.ID BETWEEN @pageBegin AND @pageEnd ORDER BY PostTime DESC

CLOSE fastRead
DEALLOCATE fastRead

RETURN @count

GO

asp代码是这样的


'获取新闻记录
set cmd = Server.CreateObject("ADODB.Command")

with cmd
.ActiveConnection = ConnString
.CommandType = adCmdStoredProc
.CommandText = "ProcListNews"
.Parameters.Append .CreateParameter ("RETURN_VALUE",adInteger,AdParamReturnValue)
.Parameters.Append .CreateParameter("@page",adInteger,,,page)
.Parameters.Append .CreateParameter("@pageSize",adInteger,,,pagesize)
set rsNews = .Execute
allcount = .Parameters("RETURN_VALUE")
end with

其他的都正常,只是不知道为什么,allcount总是获取不到返回值……
...全文
211 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
linnchord 2004-09-13
谢谢gwind
回复
gwind 2004-09-11
如果存储过程返回了列表值,生成了Recordset,那么返回值必须在Recordset关闭以后获得。

set rsNews = .Execute
……
……
rsNews.close

allcount = cmd.Parameters("RETURN_VALUE")
回复
sheng9hhd 2004-09-06
加@count int OUTPUT
回复
linnchord 2004-09-06
没有兄弟知道吗?
回复
linnchord 2004-08-27
SELECT @count=(SELECT COUNT(*) countx FROM News )

怎么会不在呢?
回复
aspgreener 2004-08-27
因为@count不在select中啊!
回复
发动态
发帖子
ASP
创建于2007-09-28

2.8w+

社区成员

ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
申请成为版主
社区公告
暂无公告