【问题标题】:VBA Call Stored Procedure with Parameters Using ADO使用 ADO 调用带参数的 VBA 存储过程
【发布时间】:2017-04-14 22:50:41
【问题描述】:

我正在尝试使用 ADO 在 VBA 中调用带有两个参数的 SQL Server 存储过程;但是我收到错误消息“运行时错误'13'类型不匹配”。我已经花了几个小时在网上搜索,但无法让它工作...... 这是我的代码:

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

cnn.ConnectionString = "Provider=SQLNCLI11;" _
                 & "Server=(Local);" _
                 & "Database=Inventory;" _
                 & "Integrated Security=SSPI;" _
                 & "DataTypeCompatibility=80;"
cnn.Open

With cmd
    .ActiveConnection = cnn
    .CommandType = "adCmdText"
    .CommandText = "usp_mySP"
    .Parameters.Append .CreateParameter("@fileName1", adChar, adParamInput, , File1.Name)
    .Parameters.Append .CreateParameter("@fileName2", adChar, adParamInput, , File2.Name)
    .Execute
End With

File1.NameFile2.Name 是我使用 FileSystemObject 获得的两个最新修改文件的名称。

usp_mySP 是我的存储过程,它本质上使用 bcp 命令导出制表符分隔的文件。它在 SQL Sever 中运行良好。

有什么建议吗?

【问题讨论】:

  • 您是否尝试过从参数名称中删除@ 字符? adVarChar?此外,不直接相关,但您肯定不想声明这些对象As New
  • @Mat's 我想我知道为什么,我不应该在 adCmdText 周围添加引号
  • 哦,对了。这是一个枚举。

标签: vba stored-procedures ado


【解决方案1】:

经过几个小时的反复试验,我终于让代码工作了。并感谢@Mat 指出将adChar 更改为adVarChar

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

cnn.ConnectionString = "Provider=SQLNCLI11;" _
             & "Server=(Local);" _
             & "Database=Inventory;" _
             & "Integrated Security=SSPI;" _
             & "DataTypeCompatibility=80;"
cnn.Open

With cmd
    .ActiveConnection = cnn
    .CommandType = adCmdStoredProc
    .CommandText = "usp_mySP"
    .Parameters.Append .CreateParameter("@fileName1", adVarChar, adParamInput, 50, File1.Name)
    .Parameters.Append .CreateParameter("@fileName2", adVarChar, adParamInput, 50, File2.Name)
    .Execute
End With
MsgBox"Thank God! Finally it's working!"
cnn.Close

【讨论】:

    猜你喜欢
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    • 2014-08-07
    • 2011-10-08
    • 1970-01-01
    • 2012-11-03
    相关资源
    最近更新 更多