Using Return Code and Output Parameters for Stored Procedures

Stored procedures can contain input parameters, output parameters, and return values.

Specify input parameters, output parameters, and return values for a stored procedure through the Parameter object. In the case of output parameters and return values, the values are not returned until the data of the Recordset object has been completely fetched or the Recordset has been closed.

The following stored procedure contains one input parameter, one output parameter, and a return parameter. The procedure selects those rows in the titles table of the pubs database where the royalty percent paid to the author is greater than the amount entered by the user (the input parameter). The program returns the number of rows as the output variable. If any rows are returned by the program, a return code of 0 is issued; if no rows are returned, a return code of 99 is returned.

USE pubs

GO

CREATE PROCEDURE myProc

@outparm        int        OUTPUT

@inparm        int

AS

SELECT * FROM titles WHERE royalty > @inparm

SELECT @outparm = COUNT (*) FROM TITLES WHERE royalty > @inparm

IF (@outparm > 0)

RETURN 0

ELSE

RETURN 99

GO

  

An ADO code program that executes the stored procedure myProc is shown here.

Dim cn As New ADODB.Connection

Dim cmd As New ADODB.Command

Dim rs As New ADODB.Recordset

Dim fldloop As ADODB.Field

Dim param1 As Parameter, param2 As Parameter, param3 As Parameter

Dim provStr As String

Dim royalty As Variant

    

Private Sub spStart()

  

' Connect using the SQLOLEDB provider.

cn.Provider = "sqloledb"

  

' Specify connection string on Open method.

provStr = "Server=MyServer;Database=pubs;Trusted_Connection=yes"

cn.Open provStr

  

' Set up a command object for the stored procedure.

Set cmd.ActiveConnection = cn

cmd.CommandText = "myProc"

cmd.CommandType = adCmdStoredProc

  

' Set up a return parameter.

Set param1 = cmd.CreateParameter("Return", adInteger, adParamReturnValue)

cmd.Parameters.Append param1

            

' Set up an output parameter.

Set param2 = cmd.CreateParameter("Output", adInteger, adParamOutput)

cmd.Parameters.Append param2

  

' Set up an input parameter.

Set param3 = cmd.CreateParameter("Input", adInteger, adParamInput)

cmd.Parameters.Append param3

royalty = Trim(InputBox("Enter royalty:"))

param3.Value = royalty

  

' Execute command, and loop through recordset, printing out rows.

Set rs = cmd.Execute

  

Dim i As Integer

While Not rs.EOF

    For Each fldloop In rs.Fields

        Debug.Print rs.Fields(i)

        i = i + 1

    Next fldloop

    Debug.Print ""

    i = 0

    rs.MoveNext

Wend

  

' Need to close recordset before getting return

' and output parameters.

rs.Close

  

Debug.Print "Program ended with return code: " & Cmd(0)

Debug.Print "Total rows satisfying condition: " & Cmd(1)

cn.Close

  

End Sub

  

Three parameters are needed for the myProc stored procedure:

Because the data type of the three stored procedure parameters is integer, there is no need to specify the data length as a parameter when defining them with the CreateParameter method.

After each parameter is added to the Parameters collection, executing the query string creates a recordset. After the recordset is closed, the values for the return code and output parameters are available.

  


(c) 1988-98 Microsoft Corporation. All Rights Reserved.