gpt4 book ai didi

sql-server - ADODB 是否在具有可选输入参数的输出参数上失败?

转载 作者:行者123 更新时间:2023-12-02 14:45:45 25 4
gpt4 key购买 nike

我在 SQL Server 2008 R2 数据库中有一个存储过程,带有可选的输入参数和输出参数,如下所示:

CREATE PROCEDURE [dbo].[spCreateTicket]
(
@TrackingCode varchar(25),
@EmailAddress varchar(250) = null,
@Ticket varchar(1000),
@UserID int,
@TicketID int output
)
AS
SET NOCOUNT ON

INSERT INTO dbTicket (TrackingCode, EmailAddress, Ticket, UserID)
SELECT
@TrackingCode, @EmailAddress, @Ticket, @UserID

SELECT @TicketID = SCOPE_IDENTITY()

RETURN @TicketID

当我在 SSMS 中调用不带可选参数的存储过程时,它工作正常:

DECLARE @TicketID int

EXEC [dbo].[spCreateTicket]
@TrackingCode = 'xOCDUv289u403k5h24s5869vK',
@Ticket = 'Something broke!',
@UserID = 64307,
@TicketID = @TicketID OUTPUT

但是当我在 ASP classic 中通过 ADODB 尝试同样的事情时,如下所示:

SET cmd = Server.CreateObject ("ADODB.Command")
cmd.ActiveConnection = HelpDeskConnection
cmd.CommandText = "spCreateTicket"
cmd.CommandType = adCmdStoredProc
cmd.Parameters.Append cmd.CreateParameter ("@TrackingCode",adVarChar,adParamInput,25,RandomString(25))
cmd.Parameters.Append cmd.CreateParameter ("@Ticket",adVarChar,adParamInput,1000,Ticket)
cmd.Parameters.Append cmd.CreateParameter ("@UserID",adInteger,adParamInput, ,Session("UserID"))
cmd.Parameters.Append cmd.CreateParameter ("@TicketID",adInteger,adParamOutput)
cmd.Execute
TicketID = cmd.Parameters("@TicketID")

它什么也不做,@TicketID 留为,并且 ADODB.Connection 包含此 NativeError 8162:

"The formal parameter \"@UserID\" was not declared as an OUTPUT parameter, but the actual parameter passed in requested output."

我一直使用ADODB来调用没有可选参数的存储过程。这是 ADODB 中的一个已知缺陷,还是我需要做一些特殊的事情才能让它在有输出参数时工作?

最佳答案

结果是the ADODB default就是忽略参数名称并简单地将它们按照附加的顺序传递给存储过程。

因此,在给出的示例中,@Ticket 作为 @EmailAddress 传递到存储过程,@UserID 作为 传递@Ticket,并且根本没有传递任何输出参数!

如果您希望 ADODB 按名称匹配参数,则必须设置 ADODB.Command .NamedParameters = True

关于sql-server - ADODB 是否在具有可选输入参数的输出参数上失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39185679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com