MDAC 2.5 SDK - ADO


 

InternetTimeout Property Example (VC++)

This example demonstrates the InternetTimeout property, which exists on the DataControl and DataSpace objects. In this case, the InternetTimeout property is demonstrated on the DataControl object and the timeout is set to 20 seconds.

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

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

// Function declarations
inline void TESTHR(HRESULT x) {if FAILED(x) _com_issue_error(x);};
void InternetTimeOutX(void);
void PrintProviderError(_ConnectionPtr pConnection);
void PrintComError(_com_error &e);

//////////////////////////////////////////////////////////
//                                                      //
//    Main Function                                     //
//                                                      //
//////////////////////////////////////////////////////////

void main()
{
    if(FAILED(::CoInitialize(NULL)))
        return;

    InternetTimeOutX();

    ::CoUninitialize();
}

//////////////////////////////////////////////////////////
//                                                      //
//         InternetTimeOutX Function                    //
//                                                      //
//////////////////////////////////////////////////////////

void InternetTimeOutX(void) 
{
    HRESULT hr = S_OK;

    // Define ADO object pointers.
    // Initialize pointers on define.
    // These are in the ADODB::  namespace.
    _RecordsetPtr  pRst = NULL;

    //Define RDS object pointers
    RDS::IBindMgrPtr dc ;

    try
    {
        TESTHR(dc.CreateInstance(__uuidof(RDS::DataControl)));
        dc->Server = "http://srv";
        dc->Connect = "DSN=Pubs";
        dc->SQL = "SELECT * FROM Authors";

        // Wait at least 20 seconds.
        dc->InternetTimeout = 20000;
        dc->Refresh();

        // Use another Recordset as a convenience
        pRst = dc->GetRecordset();
        while(!(pRst->EndOfFile))
        {
            printf("%s %s",(LPSTR) (_bstr_t) pRst->Fields->
                GetItem("au_fname")->Value,
               (LPSTR) (_bstr_t) pRst->Fields->
                GetItem("au_lname")->Value);

            pRst->MoveNext();
        }
        pRst->Close();
    }

    catch (_com_error &e)
    {
        PrintProviderError(pRst->GetActiveConnection());
        PrintComError(e);
    }
}

//////////////////////////////////////////////////////////
//                                                      //
//     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;

    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("\t Error number: %x\t%s", pErr->Number, 
                pErr->Description);
        }
    }
}

//////////////////////////////////////////////////////////
//                                                      //
//     PrintComError Function                           //
//                                                      //
//////////////////////////////////////////////////////////

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

    // Print Com errors.  
    printf("Error\n");
    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);
}