【问题标题】:Executing parameterised T-SQL stored procedure in Access vba在 Access vba 中执行参数化的 T-SQL 存储过程
【发布时间】:2016-07-17 06:04:22
【问题描述】:

当我尝试从 Access 中的更新后事件执行以下存储过程时,出现“运行时错误 (13):类型不匹配”错误。我的存储过程在 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

在此不胜感激。如果需要任何进一步的信息,请告诉我。

【问题讨论】:

  • 我觉得adVarChar应该换成adVarWChar
  • ^^ 那 - n 正在使参数 unicode,所以你需要一个 unicode 参数。另外,@Seasonnvarchar(max) 有什么原因吗?如果可以,请使用@SeasonId int。我会将 4000 个字符的输入(当实际需要可能
  • 尝试使用Execute 而不是ADODB.Commandscnn1.Execute ("EXEC dbo.StoredProcedure '" &amp; vSeason &amp; "', " &amp; vYear &amp; ";")
  • @Mat's Mug 和 Zohar - 不幸的是,切换到 adVarWChar 对数据类型错误没有影响。关于 Mat 将 Season 参数设为 int 的建议,我可以这样做,尽管我担心 vba 无法识别以 :( 开头的字符串参数。
  • @HansUp 切换附加语句没有改变任何东西

标签: sql sql-server vba ms-access


【解决方案1】:

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

尝试类似:

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

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

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    • 2015-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    相关资源
    最近更新 更多