Executing a SQL Server Stored Procedure By Using ActiveX Data Objects

If you are doing an ADO development with client server for backends, then you probably call stored procedures. In doing so, you will use the ADO Command object, as well as the Parameter object if you are passing parameters.

You will create a Command object and supply the command text, which in this case will be the name of the stored procedure, called CustOrdersHist. You can see the T-SQL for CustOrderHist in Listing A.7. This stored procedure returns product names and the total quantity purchased of those products for a given customer.

Listing A.7 Northwind SQL Server Database: T-SQL for the Stored Procedure Called CustOrdersHist
ALTER PROCEDURE CustOrderHist @CustomerID nchar(5)
AS
SELECT ProductName, Total=SUM(Quantity)
FROM Products P, [Order Details] OD, Orders O, Customers C
WHERE C.CustomerID = @CustomerID
AND C.CustomerID = O.CustomerID AND O.OrderID = OD.OrderID AND _
        OD.ProductID = P.ProductID
GROUP BY ProductName

You will then specify the type of Command object you are creating-in this case by using the type of ADODB.CommandTypeEnum.adCmdStoredProc.

The next step is to create a parameter that the Command object will use. This parameter will match the one specified in CustOrdersHist, called CustomerID. You can see the actual code for this routine, called UseAStoredProcedureWithAParameter, in Listing A.8.

Listing A.8 basCommandExamples.vb: Calling a Stored Procedure By Using Parameters
Sub UseAStoredProcedureWithAParameter(ByVal txtResults As TextBox)

        Dim cnn As New ADODB.Connection()
        Dim rstCurr As New ADODB.Recordset()
        Dim cmd As New ADODB.Command()
        Dim prm As ADODB.Parameter

        Try
            cmd.CommandText = "CustOrderHist"
            cmd.CommandType = ADODB.CommandTypeEnum.adCmdStoredProc
            prm = cmd.CreateParameter("CustomerID", ADODB.DataTypeEnum.adChar,
                                 ADODB.ParameterDirectionEnum.adParamInput, 5)

            cmd.Parameters.Append(prm)
            prm.Value = "CHOPS"

            OpenNorthwindADOConnection(cnn)

            cmd.ActiveConnection = cnn

            rstCurr.Open(cmd)

            txtResults.Text = rstCurr.GetString

        Catch excp As Exception
            MessageBox.Show(excp.Message)
        End Try

    End Sub

The last thing that this routine does is open a recordset based on the Command object. This is to the use just those records that are needed. In this case, the GetString method is used to assign it to the results text box. If you are using a bulk query, shown in the next section, you would use the Execute method. To see the routine in A.8 executed, click on the button with the caption Stored Procedure with Parameter, located on the frmMain form for this Appendix project.