Я пытаюсь выполнить хранимую процедуру (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
Может кто-нибудь помочь, почему выбрасывают эту ошибку, как я использовал этот метод для выполнения хранимой процедуры много раз раньше?