Sign-up....

我针对我的计数器表,写了一个IP统计的分页存储过程,在返回总记录数时,出现了一点问题,请大家进来看一下...

存储过程:

CREATE PROCEDURE fycounter

@ currentpage int=1,

@ pagesize int=20,

@ px varchar(20),

-- 排序字段.

@ fs varchar(4),

-- 升序还是降序

@ rsnum int output

--总记录数

AS

declare @ sqltemp varchar(1000),@ ffs varchar(4)

select @ rsnum=count(*) from [counter]

--返回记录总数

if @ fs !='asc'

begin

set @ ffs='asc'

set @ fs='desc'

end

else

begin

set @ ffs='desc'

end

if @ px=''

set @ sqltemp='select top' + str(@ pagesize)+ ' *,dbo.f_ipnumber(ip) as ipnumber from [counter] where id in (select top ' + str(@ pagesize)+ ' id from [counter] where id in (select top ' + str(@ pagesize * @ currentpage)+ ' id from [counter] order by last_time desc,ip ) order by last_time asc,ip desc) order by last_time desc,ip'

else

set @ sqltemp='select top' + str(@ pagesize)+ ' *,dbo.f_ipnumber(ip) as ipnumber from [counter] where id in (select top ' + str(@ pagesize)+ ' id from [counter] where id in (select top ' + str(@ pagesize * @ currentpage)+ ' id from [counter] order by ' + @ px + ' ' + @ fs + ') order by ' + @ px + ' ' + @ ffs + ') order by ' + @ px + ' ' + @ fs

exec (@ sqltemp)

GO

asp调用:

Set ObjCom= Server.CreateObject("ADODB.command")

ObjCom.ActiveConnection=conn

ObjCom.CommandText="fycounter"

ObjCom.CommandType=4

set compata=ObjCom.CreateParameter("@ currentpage",3,1)

ObjCom.Parameters.Append compata

ObjCom.Parameters("@ currentpage").Value=currentpage

set compata=ObjCom.CreateParameter("@ pagesize",3,1)

ObjCom.Parameters.Append compata

ObjCom.Parameters("@ pagesize").Value=MaxPerPage

set compata=ObjCom.CreateParameter("@ px",200,1,20)

ObjCom.Parameters.Append compata

ObjCom.Parameters("@ px").Value=px

set compata=ObjCom.CreateParameter("@ fs",200,1,4)

ObjCom.Parameters.Append compata

ObjCom.Parameters("@ fs").Value=fs

set compata=ObjCom.CreateParameter("@ rsnum",3,2)

ObjCom.Parameters.Append compata

'-------------注意看这里-----------------

set rs=ObjCom.execute

totalPut= ObjCom.Parameters("@ rsnum").value

'------------ 到此结束,在这种情况下 totalPut得不到值 --------

set compata=nothing

set ObjCom=nothing

象上面这样,totalPut得不到值,如果改成如下,则totalPut可以得到正确的值,但是这样又得不到数据集,请问大家没有有好的解决办法?

ObjCom.execute

totalPut= ObjCom.Parameters("@ rsnum").value

[2405 byte] By [msdn] at [2007-8-14 9:08:19]
# 1 Re: 我针对我的计数器表,写了一个IP统计的分页存储过程,在返回总记录数时,出现了一点问题,请大家进来看一下...

注:在查询分析器里,两者都能得到。

bluemoon0001 at 2005-5-18 13:49:25 >
# 2 Re: 我针对我的计数器表,写了一个IP统计的分页存储过程,在返回总记录数时,出现了一点问题,请大家进来看一下...

为什么还要用rs呢?

chjpeng at 2005-5-18 14:05:50 >
# 3 Re: 我针对我的计数器表,写了一个IP统计的分页存储过程,在返回总记录数时,出现了一点问题,请大家进来看一下...

ObjCom.execute

totalPut = ObjCom("rsnum")

创建command参数可以不加@

chjpeng at 2005-5-18 14:09:00 >
# 4 Re: 我针对我的计数器表,写了一个IP统计的分页存储过程,在返回总记录数时,出现了一点问题,请大家进来看一下...

爱莫能助.支持一下吧

tree_stone at 2005-5-18 14:16:52 >
# 5 Re: 我针对我的计数器表,写了一个IP统计的分页存储过程,在返回总记录数时,出现了一点问题,请大家进来看一下...

我想是可以的。

如:

mConn.Open strconn

set rs=server.CreateObject("adodb.recordset")

set rs=mConn.execute("exec fycounter 参数1,参数2,参数3")

K_top at 2005-5-18 14:35:17 >
# 6 Re: 我针对我的计数器表,写了一个IP统计的分页存储过程,在返回总记录数时,出现了一点问题,请大家进来看一下...

试试以下方法:

1、存储过程中将@ rsnum作为记录集的一个字段返回,用rs(")形式取得

2、给存储过程加返回值。 return @ rsnum,用ObjCom("@ RETURN_VALUE")取得

baiyunfei at 2005-5-18 14:38:16 >
# 7 Re: 我针对我的计数器表,写了一个IP统计的分页存储过程,在返回总记录数时,出现了一点问题,请大家进来看一下...

我想过作为一个字段返回,那样就重复的数据太多了;

返回值的方式,我也试了,结果和返回参数的效果一样;

还有没有更好的方法,我临时用了两个存储过程,但是这样对于复杂的条件查询也麻烦。

bluemoon0001 at 2005-5-18 14:53:55 >
# 8 Re: 我针对我的计数器表,写了一个IP统计的分页存储过程,在返回总记录数时,出现了一点问题,请大家进来看一下...

那不知和 set nocount on 有没影响,试试吧

baiyunfei at 2005-5-18 15:12:17 >
# 9 Re: 我针对我的计数器表,写了一个IP统计的分页存储过程,在返回总记录数时,出现了一点问题,请大家进来看一下...

也不行,再等等,如果再没有好的方法就结贴了。

bluemoon0001 at 2005-5-18 16:15:38 >

Web

All Classified