我无法获取返回结果集和返回值的存储过程的返回值



我正试图使用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命令返回临时表中的所有行,然后返回值。

此代码可能有什么问题?

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

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

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

相关内容

  • 没有找到相关文章

最新更新