我正在使用Excel 2007和SQL Server 2008 R2 Express。
我正在尝试从VBA中的Excel事件Worksheet.Change
调用我的SQL Server存储过程。我有一张表,我正在使用3个参数调用存储过程。
在调用此存储过程时,我收到错误:
运行时错误'-2147217900(80040e14)'
语法错误或访问冲突
到目前为止我的Excel脚本代码:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D$4" Then
Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
conn.ConnectionString = "Provider='SQLOLEDB'; " & _
"Data Source=compname\sqlservername; " & _
"Initial Catalog=databasename; " & _
"User Id= sa; " & _
"Password=****"
conn.Open
cmd.ActiveConnection = conn
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "Test1 @zmienna1= " & CStr(Range("D4").Value) & _
" @zmienna2= " & CStr(Range("D4").Value) & _
" @zmienna3= " & CStr(Range("D4").Value)
cmd.Execute 'error
conn.Close
Set conn = Nothing
Set cmd = Nothing
End If
End Sub
当我更换D4单元格时,cmd.Execute
行出错了。
我错过了什么?当我使用带参数的存储过程时,是否必须使用Parameters
对象的ADODB.Command
集合?
如果是 - 任何人都可以提供代码示例吗?有人可以帮忙吗?谢谢!
答案 0 :(得分:1)
对于存储过程,CommandText
应该只是存储过程的名称。使用Command.Parameters
集合添加参数。
Dim prm As ADODB.Parameter
Set prm = cmd.CreateParameter("@par1", adChar, adParamInput, 255, _
CStr(Range("D4").Value)
cmd.Parameters.Append prm