VBA - SQL输出参数返回NULL

时间:2018-05-18 09:38:05

标签: sql-server vba excel-vba excel

我在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

我做错了什么?

1 个答案:

答案 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作为一个变量是多余的,但你可以把它固定到手表上