Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用ADO调用带参数的VBA存储过程_Vba_Stored Procedures_Ado - Fatal编程技术网

用ADO调用带参数的VBA存储过程

用ADO调用带参数的VBA存储过程,vba,stored-procedures,ado,Vba,Stored Procedures,Ado,我正在尝试使用ADO在VBA中使用两个参数调用SQL Server存储过程;但是,我收到了错误消息“运行时错误'13'类型不匹配”。我花了几个小时在网上搜索,但就是不能让它工作。。。 这是我的密码: Dim cnn As New ADODB.Connection Dim cmd As New ADODB.Command cnn.ConnectionString = "Provider=SQLNCLI11;" _ & "Server=(Local);"

我正在尝试使用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.Name
File2.Name
是我使用FileSystemObject获得的两个最新修改文件的名称

usp_mySP
是我的存储过程,它基本上使用bcp命令导出制表符分隔的文件。它在SQLServer中工作得非常好


有什么建议或意见吗?

经过几个小时的反复试验,我终于让代码正常工作了。感谢@Mat's指出将
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

您是否尝试过从参数名称中删除
@
字符<代码>adVarChar?另外,没有直接关系,但您肯定不想将这些对象
声明为新的
@Mat's我想我知道为什么,我不应该在
adCmdText
周围添加引号哦,对了。这是一个枚举。