VBA如何将日期作为参数传递给存储过程

VBA如何将日期作为参数传递给存储过程,vba,excel,Vba,Excel,目前,我将日期参数作为varchar和convert传递,因为传递日期参数时出错。我仍然得到错误,但它是一个转换参数 Sub GetPositions() 'xdate As Date Dim sSQL As String Dim rs As ADODB.Recordset Dim cn As ADODB.Connection Dim cmd As ADODB.Command Dim prm As ADODB.Parameter Set cmd = New ADODB.Command Set p

目前,我将日期参数作为varchar和convert传递,因为传递日期参数时出错。我仍然得到错误,但它是一个转换参数

Sub GetPositions() 'xdate As Date
Dim sSQL As String
Dim rs As ADODB.Recordset
Dim cn As ADODB.Connection
Dim cmd As ADODB.Command
Dim prm As ADODB.Parameter
Set cmd = New ADODB.Command
Set prm = New ADODB.Parameter



Sheets("Positions").Select
Range("a2:bb999999").ClearContents
Set cn = New ADODB.Connection
cn.CommandTimeout = 300000
cn.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial     Catalog=GlobalR;Data Source=SWP"

    Dim d As Date
    d = "2013/12/03"

    cmd.ActiveConnection = cn
    cmd.CommandType = adCmdStoredProc
    cmd.CommandText = "Get9599Delta"
    cmd.NamedParameters = True
    Set prm = cmd.CreateParameter("@date", adVarChar, adParamInput, 12)
    cmd.Parameters.Append prm
    cmd.Parameters("@date").Value = "'12/3/2013'"
    Set rs = New ADODB.Recordset
    rs.Open cmd.Execute ''''I AM GETTING AN ERROR ON THIS LINE THAT READS
     ''''''''''' CONVERSION FAILED WHEN CONVERTING DATETIME TO CHARACTER STRING

Cells(2, 1).CopyFromRecordset rs

rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing

End Sub
这是我的存储过程

alter PROC Get9599Delta (@date varchar(12))
AS
DECLARE @d DATETIME
SET @d = CONVERT(DateTime, @date, 104) --convert the varchar to a date
知道我为什么会有这种转换问题吗?

试试这个:

.Parameters.Append .CreateParameter("@date", adDate, adParamInput, , )
@是可选的


参数adDBTimeStamp的类型通过在存储过程的顶部设置NOCOUNT解决了这个问题

我正在使用Excel 2016 MSO 16.0.8730.2175 64位,我的VBA项目正在引用Microsoft ActiveX数据对象6.1库。我正在运行SQL Server Express 64位版本11.0.3156.0 2012

我的SQL Server数据库存储过程具有日期时间数据类型的日期参数。存储过程不包含SET NOCOUNT ON

以下是我的代码的编辑版本:

Sub ExecuteStoredProcedure(date_ As Date)
    Dim connection_ As New ADODB.Connection
    connection_.Open "Provider=SQLOLEDB;Data Source=.\SQLEXPRESS;Initial Catalog=not_my_real_database_name;Integrated Security=SSPI"
    Dim command_ As New ADODB.Command

    With command_
        .ActiveConnection = connection_
        .CommandType = adCmdStoredProc
        .CommandText = "dbo.NotMyRealProcedureName"
        .Parameters.Append .CreateParameter("@Date", adDBDate, adParamInput, , date_)
        .Execute
    End With
End Sub

如果您遇到类似问题,请尝试在连接打开后注释或删除所有代码。。。呼叫由于传递给该调用的连接字符串以及VBA显示的错误信息非常小,我肯定遇到了问题,因此无法立即看出我的问题与VBA代码中的日期参数无关。

将最后一个参数留空会导致预期的表达式错误