我在VBA中有以下子,我试图从存储过程中检索输出参数的值,但它返回null或空字符串
Option Explicit
Public Sub BrandewynTest()
' Create Command Object
Set g_objCommand = New ADODB.Command
With g_objCommand
.ActiveConnection = g_objConnection
.CommandType = adCmdStoredProc
.CommandText = "BrandewynTest"
.Parameters.Refresh
.Parameters(1) = "value"
Set g_objResultset = .Execute
Debug.Print .Parameters(2).Value
End With
End Sub
以下是存储过程
CREATE PROCEDURE BrandewynTest
@value VARCHAR(50)
,@ouput INT OUTPUT
AS
IF @value = 'value'
SELECt @ouput = 1
ELSE
SELECt @ouput = 0
我做错了什么?
答案 0 :(得分:0)
您需要定义所有参数,包括输入和输出。通常,您也可以更严格地定义参数。请参阅以下代码:
Public Sub BrandewynTest()
Dim PRM As ADODB.Parameter
Dim iRetVal As Integer
' Create Command Object
Set g_objCommand = New ADODB.Command
With g_objCommand
.ActiveConnection = g_objConnection
.CommandType = adCmdStoredProc
.CommandText = "BrandewynTest"
Set PRM = .CreateParameter("@value", adVarChar, adParamInput, 50, "value")
.Parameters.Append PRM
Set PRM = .CreateParameter("@ouput", adInteger, adParamOutput, , iRetVal)
.Parameters.Append PRM
.Execute
iRetVal = CMD.Parameters("@ouput")
Debug.Print iRetVal
End With
End Sub
你可以说,将iretval作为一个变量是多余的,但你可以把它固定到手表上