【发布时间】:2016-04-15 04:30:40
【问题描述】:
我正在尝试使用 ADODB 2.0 库从 Excel VBA 执行 MSSQL 存储过程(也尝试过 2.8,但存在相同的问题) 它发送结果集以及返回值。我能够正确获取结果集值但无法获取返回值(总是将返回值设为空。)
以下是用于此目的的 VBA 过程,它采用以下参数:
db connection, sp name, parameter values string array, db result set, spretval -- 最后两个是out参数
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命令从临时表中返回所有行,然后返回值。
这段代码可能有什么问题?
【问题讨论】:
标签: sql-server excel vba stored-procedures resultset