我无法获得返回结果集的存储过程的返回值以及返回值

时间:2016-04-15 04:30:41

标签: sql-server excel-vba stored-procedures return-value resultset

我正在尝试使用ADODB 2.0库从Excel VBA执行MSSQL存储过程(尝试过2.8但也存在同样的问题) 它发送结果集以及返回值。我能够正确获取结果集值但无法获得返回值(始终将返回值设置为空。)

以下是用于此目的的VBA过程,它采用以下参数: db connection, sp name, parameter values string array, db result set, spretval - 最后两个是参数

Private Sub execSQLSP(dbcon, spname, paramStrInArray, ByRef dbrs, ByRef spretval)
 Dim cmd As ADODB.Command
 Dim dberrflag As Integer
 Dim dberrdesc As String
 Dim ndx As Long
 Dim paramname As String
 On Error Resume Next

 Set cmd = New ADODB.Command
 Set cmd.ActiveConnection = dbcon
 cmd.CommandText = spname
 cmd.CommandType = adCmdStoredProc

 cmd.Parameters.Append cmd.CreateParameter("retVal", adInteger, _ 
                                           adParamReturnValue)

 For ndx = 0 To UBound(paramStrInArray)
     paramname = "param" & ndx
     cmd.Parameters.Append cmd.CreateParameter(Name:=paramname, _
                               Type:=adVarChar, Direction:=adParamInput, _
                               size:=Len(paramStrInArray(ndx)), _
                               Value:=paramStrInArray(ndx))
 Next

Set dbrs = cmd.Execute     
 Call getDBerror(dbcon.Errors, dberrflag, dberrdesc)
 If dberrflag = 1 Then
    MsgBox "DB Error while executing following SQL command and hence stopping." & vbCrLf & _
           "SQL Cmd:" & spname & vbCrLf & _
           "DB Err.:" & dberrdesc, vbCritical, appnameversion
    cleanup
    End
 End If
 spretval = cmd.Parameters("retVal").Value
 MsgBox cmd.Parameters("retVal")
End Sub

执行此VBA过程后,获取结果集,使用该结果集我能够正确获取结果集值但不返回值。我只获得空值(实际上SP返回10)

存储过程包含一些将数据插入临时表的处理,最后通过select命令返回临时表中的所有行,然后返回值。

此代码可能存在什么问题?

1 个答案:

答案 0 :(得分:1)

我在关闭记录集对象后查询返回值时设法得到返回值。

显然,完全阅读记录集还不够;还需要关闭记录集对象,以便在命令对象中填充返回值和参数值。我在ADO文档中找不到这个。

看起来这可能是一个ADO设计问题,只有在关闭记录集对象后才会填充命令对象返回/参数值。