ADO 2.5 Samples

ActiveConnection, CommandText, CommandTimeout, CommandType, Size, and Direction Properties Example (VC++)

This example uses the ActiveConnection, CommandText, CommandTimeout, CommandType, Size, and Direction properties to execute a stored procedure.

// BeginActiveConnectionCpp
#import "C:\Program Files\Common Files\System\ADO\msado15.dll" \
    no_namespace rename("EOF", "EndOfFile")

#define TESTHR(x) if FAILED(x) _com_issue_error(x)

#include <stdio.h>
#include <ole2.h>
#include "conio.h"
#include "ActiveConnectionX.h"

//Function declaration
void ActiveConnectionX(VOID);
void PrintProviderError(_ConnectionPtr pConnection);

///////////////////////////////////////////////////////////
//                                                       //
//      Main Function                                    //
//                                                       //
///////////////////////////////////////////////////////////
void main()
{
    if(FAILED(::CoInitialize(NULL)))
        return;
    
    ActiveConnectionX();
        
    //Wait here for user to see the output..
    printf("\n\nPress any key to continue..");
    getch();  
    
    ::CoUninitialize();
}



///////////////////////////////////////////////////////////
//                                                       //
//      ActiveConnectionX Function                       //
//                                                       //
///////////////////////////////////////////////////////////
VOID ActiveConnectionX(VOID)
{
    HRESULT hr = S_OK;  

    // Define ADO object pointers.
    // Initialize pointers on define.
    // These are in the ADODB::  namespace.
    _ConnectionPtr  pConnection      = NULL;
    _CommandPtr     pCmdByRoyalty  = NULL;
    _RecordsetPtr  pRstByRoyalty  = NULL;
    _RecordsetPtr  pRstAuthors   = NULL;
    _ParameterPtr    pPrmByRoyalty  = NULL;


    //Define Other variables
    IADORecordBinding   *picRs = NULL;  //Interface Pointer declared.(VC++ Extensions)  TCS(SPA)
    CEmployeeRs emprs;          //C++ class object  TCS(SPA)
    _bstr_t strAuthorId;
    int intRoyalty;
    VARIANT vtroyal ; 

    _bstr_t strCnn("Provider='sqloledb';Data Source='MySqlServer';"
            "Initial Catalog='pubs';Integrated Security='SSPI';");

    try
    {
        //Define a command object for a stored procedure. 

        TESTHR(pConnection.CreateInstance(__uuidof(Connection)));      
        hr = pConnection->Open(strCnn,"","",adConnectUnspecified);  
        
        TESTHR(pCmdByRoyalty.CreateInstance(__uuidof(Command)));
        
        pCmdByRoyalty->ActiveConnection = pConnection;
        pCmdByRoyalty->CommandText = "byRoyalty";
        pCmdByRoyalty->CommandType = adCmdStoredProc;
        pCmdByRoyalty->CommandTimeout = 15;

        //Define stored procedure's input parameter. 
        printf("Enter Royalty :  ");
        scanf("%d",&intRoyalty);

        //Assign Integer value 
        vtroyal.vt = VT_I2;
        vtroyal.iVal  = intRoyalty;

        TESTHR(pPrmByRoyalty.CreateInstance(__uuidof(Parameter)));
        pPrmByRoyalty->Type = adInteger;
        pPrmByRoyalty->Size = 3;
        pPrmByRoyalty->Direction = adParamInput;
        pPrmByRoyalty->Value = vtroyal;
        pCmdByRoyalty->Parameters->Append(pPrmByRoyalty);
        
        //Create a recordset by executing a command. 
        pRstByRoyalty = pCmdByRoyalty->Execute(NULL,NULL,adCmdStoredProc); 

        //Open the authors table to get author names for display. 

        TESTHR(pRstAuthors.CreateInstance(__uuidof(Recordset)));
        hr = pRstAuthors->Open("authors",strCnn,adOpenForwardOnly,adLockReadOnly,adCmdTable);

        //Open an IADORecordBinding interface pointer which we'll use for Binding Recordset to a class    
        TESTHR(pRstAuthors->QueryInterface(__uuidof(IADORecordBinding),(LPVOID*)&picRs));

        //Bind the Recordset to a C++ Class here    
        TESTHR(picRs->BindToRecordset(&emprs));


        //Print current data in the recordset ,adding author names from author table. 
        printf("Authors With  %d  Percent Royalty",intRoyalty);

        while(!(pRstByRoyalty->EndOfFile))
        {
            strAuthorId = pRstByRoyalty->Fields->Item["au_id"]->Value;
            pRstAuthors->Filter = "au_id = '"+strAuthorId+"'";
         
            printf("\n\t%s, %s %s",emprs.lau_idStatus == adFldOK ? emprs.m_szau_id : "<NULL>",\
            emprs.lau_fnameStatus == adFldOK ? emprs.m_szau_fname : "<NULL>",\
                    emprs.lau_lnameStatus == adFldOK ? emprs.m_szau_lname : "<NULL>");

            pRstByRoyalty->MoveNext(); 
        }
    }
    catch(_com_error &e)
    {
        // Notify the user of errors if any.
        _bstr_t bstrSource(e.Source());
        _bstr_t bstrDescription(e.Description());

         PrintProviderError(pConnection);
         printf("Source : %s \n Description : %s \n",(LPCSTR)bstrSource,(LPCSTR)bstrDescription);
    }

    // Clean up objects before exit.
    //Release the IADORecordset Interface here
    if (picRs) 
        picRs->Release();

    if (pRstByRoyalty)
        if (pRstByRoyalty->State == adStateOpen)
            pRstByRoyalty->Close();
    if (pRstAuthors)
        if (pRstAuthors->State == adStateOpen)
            pRstAuthors->Close();
    if (pConnection)
        if (pConnection->State == adStateOpen)
            pConnection->Close();
}



///////////////////////////////////////////////////////////
//                                                       //
//      PrintProviderError Function                      //
//                                                       //
///////////////////////////////////////////////////////////

VOID PrintProviderError(_ConnectionPtr pConnection)
{
    // Print Provider Errors from Connection object.
    // pErr is a record object in the Connection's Error collection.
    ErrorPtr    pErr  = NULL;
    long      nCount  = 0;    
    long      i     = 0;

    if( (pConnection->Errors->Count) > 0)
    {
        nCount = pConnection->Errors->Count;
        // Collection ranges from 0 to nCount -1.
        for(i = 0; i < nCount; i++)
        {
            pErr = pConnection->Errors->GetItem(i);
            printf("Error number: %x\t%s", pErr->Number,(LPCSTR)pErr->Description);
        }
    }
}

// EndActiveConnectionCpp

ActiveConnectionX.h

// BeginActiveConnectionH
#include "icrsint.h"


//This Class extracts  fname,lastname    

class CEmployeeRs : public CADORecordBinding
{
BEGIN_ADO_BINDING(CEmployeeRs)
    
    //Column au_id is the 1st field in the recordset   
    ADO_VARIABLE_LENGTH_ENTRY2(1, adVarChar, m_szau_id, 
         sizeof(m_szau_id), lau_idStatus, TRUE)

    ADO_VARIABLE_LENGTH_ENTRY2(2, adVarChar, m_szau_lname, 
         sizeof(m_szau_lname), lau_lnameStatus, TRUE)

    ADO_VARIABLE_LENGTH_ENTRY2(3, adVarChar, m_szau_fname, 
         sizeof(m_szau_fname), lau_fnameStatus, TRUE)
   
END_ADO_BINDING()

public:

    CHAR m_szau_id[20];
    ULONG lau_idStatus;

    CHAR m_szau_fname[40];
    ULONG lau_fnameStatus;
    
    CHAR   m_szau_lname[40];
    ULONG  lau_lnameStatus;

};
// EndActiveConnectionH

See Also

ActiveConnection Property | CommandText Property | CommandTimeout Property | CommandType Property | Direction Property | Size Property

© 1998-2003 Microsoft Corporation. All rights reserved.