Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
ConnectionString, ConnectionTimeout, and State Properties Example (VC++)
Collapse the table of content
Expand the table of content

ConnectionString, ConnectionTimeout, and State Properties Example (VC++)


This example demonstrates different ways of using the ConnectionString property to open a Connection object. It also uses the ConnectionTimeout property to set a connection timeout period, and the State property to check the state of the connections. The GetState function is required for this procedure to run.


If you are connecting to a data source provider that supports Windows authentication, you should specify Trusted_Connection=yes or Integrated Security = SSPI instead of user ID and password information in the connection string.

// ConnectionStringSampleCpp.cpp
// compile with: /EHsc
#import "msado15.dll" no_namespace rename("EOF", "EndOfFile")

// Function declarations
inline void TESTHR(HRESULT x) {if FAILED(x) _com_issue_error(x);};
void ConnectionStringX();
_bstr_t GetState(int intState); 
void PrintProviderError(_ConnectionPtr pConnection);
void PrintComError(_com_error &e);

int main() {
   if (FAILED(::CoInitialize(NULL)))
      return 0;


void ConnectionStringX() {
   // Define Connection object pointers.  Initialize pointers on define.  These are in the ADODB::  namespace
   _ConnectionPtr pConnection1 = NULL;
   _ConnectionPtr pConnection2 = NULL;
   _ConnectionPtr pConnection3 = NULL;
   _ConnectionPtr pConnection4 = NULL;

   // Define Other Variables
   HRESULT hr = S_OK;

   try {
      // Open a connection using OLE DB syntax.
      pConnection1->ConnectionString = "Provider='sqloledb';Data Source='(local)';"
         "Initial Catalog='Pubs';Integrated Security='SSPI';";
      pConnection1->ConnectionTimeout = 30;
      pConnection1->Open("", "", "",adConnectUnspecified);
      printf("cnn1 state: %s\n", (LPCTSTR)GetState(pConnection1->State));

      // Open a connection using a DSN and ODBC tags.
      // It is assumed that you have create DSN 'DataPubs' with a user name as 
      // 'MyUserId' and password as 'MyPassword'.
      pConnection2->ConnectionString = "DSN=DataPubs;UID=MyUserId;PWD=MyPassword;";
      pConnection2->Open("", "", "", adConnectUnspecified);
      printf("cnn2 state: %s\n", (LPCTSTR)GetState(pConnection2->State));

      // Open a connection using a DSN and OLE DB tags.
      pConnection3->ConnectionString = "Data Source=DataPubs;";
      pConnection3->Open("", "", "", adConnectUnspecified);
      printf("cnn3 state: %s\n", (LPCTSTR)GetState(pConnection3->State));

      // Open a connection using a DSN and individual arguments instead of a connection string.
      // It is assumed that you have create DSN 'DataPubs' with a user name as 
      // 'MyUserId' and password as 'MyPassword'.
      pConnection4->Open("DataPubs", "MyUserId", "MyPassword", adConnectUnspecified);
      printf("cnn4 state: %s\n", (LPCTSTR)GetState(pConnection4->State));
   catch(_com_error &e) {
      // Notify user of any errors.  Pass a connection pointer accessed from the Connection.
      if (pConnection2)

      if (pConnection3)

      if (pConnection4)


   // Cleanup objects before exit.
   if (pConnection1)
      if (pConnection1->State == adStateOpen)

   if (pConnection2)
      if (pConnection2->State == adStateOpen)

   if (pConnection3)
      if (pConnection3->State == adStateOpen)

   if (pConnection4)
      if (pConnection4->State == adStateOpen)

_bstr_t GetState(int intState) {
   _bstr_t strState; 
   switch(intState) {
   case adStateClosed:
      strState = "adStateClosed";
   case adStateOpen:
      strState = "adStateOpen";
   return strState;

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

   if ( (pConnection->Errors->Count) > 0) {
      long nCount = pConnection->Errors->Count;

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

void PrintComError(_com_error &e) {
   _bstr_t bstrSource(e.Source());
   _bstr_t bstrDescription(e.Description());

   // Print Com errors.  
   printf("\tCode = %08lx\n", e.Error());
   printf("\tCode meaning = %s\n", e.ErrorMessage());
   printf("\tSource = %s\n", (LPCSTR) bstrSource);
   printf("\tDescription = %s\n", (LPCSTR) bstrDescription);
© 2015 Microsoft