【问题标题】:SQL Server stored procedure with parameters invoked from Excel event带有从 Excel 事件调用的参数的 SQL Server 存储过程
【发布时间】:2014-03-10 13:06:17
【问题描述】:

我正在使用 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 行出现错误。

我错过了什么?当我使用带参数的存储过程时,是否必须使用 ADODB.Command 对象的 Parameters 集合?

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

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-14
      相关资源
      最近更新 更多