SQL Server存储过程,其中包含从Excel事件调用的参数

时间:2014-02-12 09:41:00

标签: sql sql-server excel vba stored-procedures

我正在使用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集合?

如果是 - 任何人都可以提供代码示例吗?有人可以帮忙吗?谢谢!

1 个答案:

答案 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