为什么我的 ADODB 命令输出参数在 MSSQL 存储过程使用 int 填充时为空?

Why is my ADODB command output parameter null when the MSSQL stored procedure is populating it with an int?

我有一个 MSSQL 存储过程,它显式地将输出参数设置为一个值。但是,当我使用 ADODB 命令从经典 ASP 页面执行该存储过程时,输出参数为空。

存储过程:

ALTER PROCEDURE [dbo].[recordResponse]
    @survey_id smallint OUTPUT, 
    @member_id varchar(10) OUTPUT,
    @response varchar(1000) OUTPUT,
    @comment varchar(1000) OUTPUT,
    @response_id int OUTPUT,
    @timestamp datetime OUTPUT,
    @status int OUTPUT
AS
BEGIN
    SET NOCOUNT ON;
    SET @timestamp = getdate();

    DECLARE @surveyExists as binary

    Select @surveyExists = 1 from surveys where survey_id = @survey_id;

    if (@surveyExists = 1)
        BEGIN
            insert into
                responses(member, [timestamp], response, comments, survey_id)
                values(@member_id, @timestamp, @response, @comment, @survey_id);

            set @response_id = SCOPE_IDENTITY();
        set @status = 200;
        END
    else
        set @status = 400;
END

经典ASP:

    Set cmd = Server.CreateObject("ADODB.Command") 'Initiate the command object
    cmd.CommandType = 4 'Stored Procedure
    cmd.CommandText = "recordResponse" 'Name of the stored procedure

    cmd.ActiveConnection = connString 'Using which connection?

    'Add the parameters
    cmd.Parameters.Append cmd.CreateParameter("@survey_id", 2, 3, 0, 1)
    cmd.Parameters.Append cmd.CreateParameter("@member_id", 200, 3, 10, memberNo)
    cmd.Parameters.Append cmd.CreateParameter("@response", 200, 3, 1000, answer)
    cmd.Parameters.Append cmd.CreateParameter("@comment", 200, 3, 1000, comment)
    cmd.Parameters.Append cmd.CreateParameter("@response_id", 2, 2)
    cmd.Parameters.Append cmd.CreateParameter("@timestamp", 135, 2)
    cmd.Parameters.Append cmd.CreateParameter("@status", 3, 2)

    'Execute stored procedure
    Call cmd.Execute()

    Response.write "[" & cmd("@status") & "]"

这导致输出 [] 而我期望输出 [200][400]

我查看了各种其他 并采纳了建议和解决方案,包括遍历生成的记录集,但 none 解决了我的问题。

谁能看出我哪里错了???

请尝试

cmd.Parameters["@status"].Value

创建参数参数要这样设置。 在 ADO 中设置 objparameter=objcommand.CreateParameter (name,type,direction,size,value).

请正确设置参数、类型、方向和大小。

  Response.write "[" & cmd.Parameters("@status").Value & "]"

我发现了问题:我为参数 @response_id 使用了错误的数据类型。我有 adSmallInt (2),而它应该是 adInteger (3) 以匹配存储过程中声明的数据类型。 MSSQL 抛出异常,但我的 ASP 脚本指定了 On Error Resume Next,它默默地吞下了错误。因此脚本 运行 和 SP 执行了 INSERT 语句但无法设置 @status 参数,但脚本仍然保持 运行。一旦我注释掉 On Error Resume Next,我就可以看到异常并找到罪魁祸首。

感谢您的所有建议。非常感谢!