1

私はオプションの入力パラメータと、このような出力パラメータを持つSQL Server 2008 R2のデータベースにストアドプロシージャを持っている: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 

私はSSMSでオプションのパラメータを指定しないでストアドプロシージャを呼び出すと、それが正常に動作します:

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") 

それは何もしない、@TicketIDEmptyを残しており、ADODB.Connectionのは、このNativeErrorに8162が含まれています

ユーザーID \「は。OUTPUT パラメータが、要求された出力に渡される実際のパラメータとして宣言されていない」@「\仮引数」

私はADODBを使用して、オプションのパラメータを付けずにストアドプロシージャを呼び出すことができます。これはADODBの既知の欠陥ですか、あるいは出力パラメータがあるときに動作させるために何か特別な処理を行う必要がありますか?

答えて

3

the ADODB defaultは、パラメータ名を無視し、追加した順番でsprocに渡すだけです。

したがって、与えられた例では、@Ticket@EmailAddressとしてSPROCに渡された、@UserID@Ticketとして渡された、そして何も出力パラメータが全く渡されませんでした!

ADODBに名前でパラメータを一致させるには、ADODB.Command .NamedParameters = Trueを設定する必要があります。

関連する問題