User ID:
Password:
Remember Me:
Forgot Password?
Not a member?
Click here for more information and to register.

    OLE DB Templates - A light and simple Data Access Method



    I was amazed and delighted to see how simple database access has become thanks to OLE DB. I've been reading the hype and so I went out and found the Microsoft Book on OLE DB. It's a great idea as it's explained there but still rather complex to code. I noticed that Visual C++ 6 has some new templates for Data Consumers so I started looking at the documentation. Wow! Is this simple stuff or what??

    Here's a sample, a CONSOLE application at that, using the NWind database that comes with the DASDK. It's only 99 lines of code including comments and it compiles into a 60K executable.


     
    //file: olsamp.cpp 
    //auth: dick warg 
    //date: 6/25/99 
    //func: minimal oledb program
    
    #include <atldbcli.h>
    #include <iostream>
    using namespace std;
    
    // define a class to hold the data from the table
    class myNwCust
    {
    public:
        // data elements
        TCHAR m_CustomerID[6];
        TCHAR m_CompanyName[41];
        TCHAR m_ContactName[31];
        TCHAR m_Phone[25];
    
        // column binding  -- I only want these 4 fields
        BEGIN_COLUMN_MAP(myNwCust)
            COLUMN_ENTRY(1, m_CustomerID)
            COLUMN_ENTRY(2, m_CompanyName)
            COLUMN_ENTRY(3, m_ContactName)
            COLUMN_ENTRY(4, m_Phone)
        END_COLUMN_MAP()
    };
    
    // declare the OLEDB objects
    CDataSource ds;
    CSession    session;
    CCommand <CAccessor<myNwCust> > cust;
    
    int main()
    {
    
    try{
        // fire up COM
        HRESULT hr = CoInitialize(0);
        if(FAILED(hr))
        {
            cout << "Can't start COM!? " << endl;
            return -1;
        }
        
        // connect to the database
        hr = ds.Open(_T("MSDASQL"), "OLE_DB_NWind_Jet", "sa", "");
        if(FAILED(hr))
        {
            cout << "Can't open Nwind" << endl;
            return -1;
        }
    
        // start the session
        hr = session.Open(ds);
        if(FAILED(hr))
        {
            cout << "Can't open Nwind SESSION" << endl;
            ds.Close();
            return -1;
        }
    
        // construct the query string
        TCHAR mySQL[] = "SELECT CustomerID, CompanyName, ContactName, \
        Phone FROM Customers";
    
        // open the dataset
        hr = cust.Open(session, mySQL);
        if(FAILED(hr))
        {
            cout << "Can't open Nwind TABLE" << endl;
            session.Close();
            ds.Close();
            return -1;
        }
    
        // read all the data
        while(cust.MoveNext() == S_OK)
        {
            cout << cust.m_CustomerID << ", " << cust.m_CompanyName << ", "; 
    
            cout << cust.m_ContactName << ", " << cust.m_Phone << endl;
        }
    
        cust.Close();
        session.Close();
        ds.Close();
    
        cout << "That's All Folks" << endl;
    
        return 1;
    }
    catch(...)
    {
        cout << "Unknown failure" << endl;
        return -1;
    }
    }
    

    The Microsoft documentation and samples are in the MSDN pages "Visual C++ Documentation \ References \ Microsoft Foundation Class Library and Templates\OLE DB Templates"

    IT Offers


    Top Authors