1

Я пытаюсь выполнить хранимую процедуру (SQL Server 2008) с использованием ADO через Excel 2007 VBA. При выполнении хранимой процедуры, я получаю следующее сообщение об ошибке: Procedure or function 'crl_GetData' expects parameter '@StartDate', which was not supplied.Параметр не поставляется Ошибка при выполнении хранимой процедуры

Я снабжая параметры с помощью метода ADODB.Command так:

Public Function fGetMI(strStart As String, strEnd As String) As ADODB.Recordset 

Dim oDB As ADODB.Connection: Set oDB = New ADODB.Connection 
Dim oCM As ADODB.Command: Set oCM = New ADODB.Command 
Dim oRS As ADODB.Recordset 

oDB.Open gcConn 

With oCM 
    .ActiveConnection = oDB 
    .CommandType = adCmdStoredProc 
    .CommandText = "crl_GetData" 
    .Parameters.Append .CreateParameter("@StartDate", adDate, adParamInput, , strStart) 
    .Parameters.Append .CreateParameter("@EndDate", adDate, adParamInput, , strEnd) 
    Set oRS = .Execute 'Error thrown here' 
End With 

If Not oRS.BOF And Not oRS.EOF Then 
    Set fGetMI = oRS 
End If 

oRS.Close 
Set oRS = Nothing 
oDB.Close 
Set oDB = Nothing 

End Function 

ошибки получена на линии Set oRS = .Execute.

Хранимая процедура требует параметра @StartDate вместе с параметром @EndDate и хранимой процедурой определяется следующим образом:

CREATE PROCEDURE [dbo].[crl_GetData] 
    @TL varchar(128) = null, 
    @Unit varchar(16) = null, 
    @Site varchar(16) = null, 
    @OutcomeId int = null, 
    @Auth varchar(128) = null, 
    @StartDate datetime, 
    @EndDate datetime 
AS 
    BEGIN 
     SELECT 
      [Claim Handler], 
      [Team Leader], 
      [Unit], 
      [Site], 
      [Claim Reference], 
      [Outcome], 
      [Authoriser], 
      [Date] 

     FROM 
      crl_all_data 

     WHERE 
      [Date] BETWEEN @StartDate AND @EndDate 
      AND (@TL IS NULL OR ([TL_ID] = @TL)) 
      AND (@Unit IS NULL OR ([Unit] = @Unit)) 
      AND (@Site IS NULL OR ([Site] = @Site)) 
      AND (@OutcomeId IS NULL OR ([OUTCOME_ID] = @OutcomeId)) 
      AND (@Auth IS NULL OR ([AUTH_ID] = @Auth)) 

     ORDER BY 
      [Date] ASC 

     OPTION(RECOMPILE); 
    END 

GO 

Может кто-нибудь помочь, почему выбрасывают эту ошибку, как я использовал этот метод для выполнения хранимой процедуры много раз раньше?

ответ

2

Вам нужно добавить:

oCM.NamedParameters = True 

перед назначением параметров, в противном случае они фактически передаются по позиции.

Смежные вопросы