我正在尝试使用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命令返回临时表中的所有行,然后返回值。
此代码可能存在什么问题?
答案 0 :(得分:1)
我在关闭记录集对象后查询返回值时设法得到返回值。
显然,完全阅读记录集还不够;还需要关闭记录集对象,以便在命令对象中填充返回值和参数值。我在ADO文档中找不到这个。
看起来这可能是一个ADO设计问题,只有在关闭记录集对象后才会填充命令对象返回/参数值。