在Access vba中执行参数化的T-SQL存储过程

时间:2016-03-29 15:19:44

标签: sql sql-server vba ms-access

当我尝试从Access中的更新后事件执行下面的sproc时,我收到“运行时错误(13):类型不匹配”错误。我的sproc在SQL(MSSQL2014)中将@Season作为nvarchar(max)和@Year作为int。关于原因的任何想法?我整天都在搜索,但还没有快乐。这是代码:

Private Sub Event_Click()

    Dim cnn1 As New ADODB.Connection
    Dim cmd As New ADODB.Command


    Set cnn1 = New ADODB.Connection
    cnn1.ConnectionString = "<connection string snipped but works OK>"
    cnn1.ConnectionTimeout = 30
    cnn1.Open

vSeason = Me.ComboBox1.Value
vYear = Me.ComboBox2.Value

With cmd
    .ActiveConnection = cnn1
    .CommandText = "dbo.StoredProcedure"
    .CommandType = 4
    .CommandTimeout = 0
    .Parameters.Append .CreateParameter("@Season", adVarChar, adParamInput, vSeason)
    .Parameters.Append .CreateParameter("@Year", adInteger, adParamInput, vYear)

End With

    cnn1.Close
    Set cnn1 = Nothing

非常感谢这里的任何指示。需要进一步的信息让我知道。

1 个答案:

答案 0 :(得分:0)

我认为问题在于CreateParameter在其值之前需要adVarChar数据类型的大小。

尝试类似:

.Parameters.Append .CreateParameter("@Season", adVarChar, adParamInput, 200, vSeason)

在代码中,值vSeason作为size参数传递,
您将字符串作为整数传递给CreateParameter,这是类型不匹配错误

我希望这会有所帮助