ADO 2.7 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=MyServer;"
         "Initial Catalog=pubs;User Id=sa;Password=;");

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(); 
   }
   
   // Clean up objects before exit
   pRstByRoyalty->Close();
   pRstAuthors->Close();

   //Release the IADORecordset Interface here   
   if (picRs)
       picRs->Release();
       pConnection->Close(); 
}

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);
}

}



///////////////////////////////////////////////////////////
//                                                       //
//      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-2001 Microsoft Corporation. All rights reserved.