我的Sql Server2000存储过程及其在ASP中的调用代码,为啥老是不对头呢?高分征解。
我的ASP代码如下(主要的错误地方我在后面用注解标明):
<!-- #include virtual="adovbs.inc"-->
<%
Set Conn=Server.CreateObject("Adodb.connection")
conn.open connstr
Set ObjCmd=Server.CreateObject("Adodb.Command")
objCmd.CommandText="Music_GetByClass"
objCmd.CommandType=4
set objCmd.ActiveConnection=Conn
'问题1:为啥我用下面的代码添加参数却不能成功,浏览器提示什么参数类型不一致
' setobjParam=objCmd.CreateParameter("@MusicClass",200)
' objCmd.Parameters.Append objParam
' objParam.Value="MP3"
objCmd.Parameters.Append objCmd.CreateParameter("@MusicClass", 200, 1, 50, "MP3")
'问题2:下面如果我添加第二个参数@PageNo,浏览器也提示错误
'objCmd.Parameters.Append objCmd.CreateParameter("@PageNo",3,1,5,"5")
Set Rs=objCmd.execute
'问题3:下面我想获得返回的记录数,可是输出结果却为-1,但当我用
'do while not rs.eof 输出记录,rs.movenext Loop形式时,却有很多记录存在。
response.write rs.recordcount&"<br>"
我的存储过程为:
CREATE PROCEDURE Music_GetByClass
@MusicClass varchar(50)
AS
//本来我想用@PageNO来传入参数的,但由于在ASP中定义该参数出错,这里手工进行定义、修改,以方便调试。
declare @PageNo int
declare @tempSize varchar(50)
//问题4:这里非常奇怪,我把下面的@Pageno=1可以得到结果。但我将@PageNO设为>=2以上的值时,浏览器却提示“必须声明变量 '@MusicClass' ,在某某ASP里某一行”
set @Pageno=1
set @TempSize=Cast((@PageNo-1)*15 as varchar(50))
if @PageNo=1
Select top 15 *
From CM_Music
Where Music_Class=@MusicClass
Order By Music_LastPlayTime DESC
else
Exec('Select top 15 *
From CM_Music
Where ID Not in (
Select top '+@TempSize+' ID
From CM_Music
Where Music_Class=@MusicClass
Order By Music_LastPlayTime DESC )
Order By Music_LastPlayTime DESC')
GO
今天我就被这几个问题折腾了一天了,问题还是没有解决,有没有哪位高手帮帮忙啊,敬请各位大虾帮助。