ADO问题,“@ IsNew”参数导致没有返回结果?

时间:2009-08-06 21:03:31

标签: sql asp-classic ado

这是经典ASP中的ADO。

我有一个带有类型为int的参数@IsNew的存储过程。

我可以通过SQL调用它:

EXEC    [dbo].[SearchVehicles]
    @WebsiteName = N'AMSVans',
    @SortOrder = N'Year DESC,Status ASC',
    @Statuses = N'Unsold',
    @IsNew = 1

返回集完全符合预期。

但是,当我尝试在我的网页中使用它时:

cmd.CommandText = "AMSVans.dbo.SearchVehicles"
cmd.CommandType = adCmdStoredProc

cmd.Parameters.Append cmd.CreateParameter("@WebsiteName", adVarChar, , 75, "AMSVans")
cmd.Parameters.Append cmd.CreateParameter("@SortOrder", adVarChar, , 500, "Year DESC,Status ASC," + SortMethod)
cmd.Parameters.Append cmd.CreateParameter("@Statuses", adVarChar, , 500, Statuses)
cmd.Parameters.Append cmd.CreateParameter("@IsNew", adInteger, , 4,1)
cmd.Parameters.Append cmd.CreateParameter("@Categories", adVarChar, , 500, "AMS Vans")

Set r = cmd.Execute

我什么都没回来。纳达。齐尔希。

我甚至不确定从哪里开始调试这个: - /

更新RE“设置nocount on”:

有趣的是,如果我将其关闭(即注释掉该行),我会收到此错误:

ADODB.Recordset error '800a0e78' 
Operation is not allowed when the object is closed. 
/pages/inventory/main.asp, line 109 

有问题的行(r是记录集):

if not (r.EOF and r.EOF) then invFound = true

2 个答案:

答案 0 :(得分:1)

如果您的存储过程可以生成多个结果集(包括不打算返回的中间结果),请尝试在proc开头设置nocount。多个结果可能会导致ado记录集出现问题。

e.g。

Set NoCount On

此外,如果这不起作用,并且您最近更改了proc,请尝试从具有不同参数的页面运行它,以便您不会获得缓存结果。

修改

我注意到你正在为int参数指定一个长度,这只是变量长度类型所必需的,并且通常默认为0,尝试省略它。

答案 1 :(得分:0)

我现在意识到,如果我认为程序有大约20个参数,并且因为@IsNew是最后一个,而其他人是第一个 - 那么,这对每个人来说都是显而易见的,好吧,我只想说为两者之间添加默认值参数会产生重大影响。