1

내가 선택적 입력 매개 변수가있는 SQL 서버 2008 R2 데이터베이스에 저장 프로 시저와 같은 출력 매개 변수를 한 : 나는 SSMS에서 선택적 매개 변수없이 저장 프로 시저를 호출 할 때ADODB는 선택적 입력 매개 변수로 출력 매개 변수에 실패합니까?

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 

잘 작동 :

DECLARE @TicketID int 

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

하지만이 같은 ASP 고전에서 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") 

, 012 3,246,647,474,가 Empty 왼쪽되며, ADODB.Connection이 NativeError 8162이 포함되어

사용자 ID의 \ "이. 출력 매개 변수 만 요청 된 출력에 전달 된 실제 매개 변수로 선언되지 않았다"@ "\ 공식 매개 변수"

ADODB를 사용하여 선택적 매개 변수없이 항상 저장 프로 시저를 호출합니다. 이것은 ADODB의 알려진 결함입니까, 아니면 출력 매개 변수가있을 때 작동하도록 특정 작업을 수행해야합니까?

답변

3

밝혀졌습니다. the ADODB default은 매개 변수 이름을 무시하고 추가 된 순서대로 sproc에 전달하기 만하면됩니다.

따라서, 주어진 예에서,이 @Ticket@EmailAddress 같이 SPROC에 전달하고,이 @UserID@Ticket로 전달되고, 어떠한 출력 파라미터는 전혀 전달되었다!

ADODB에 매개 변수 이름을 일치 시키려면 ADODB.Command .NamedParameters = True을 설정해야합니다.