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"


Comments

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Live Event Date: November 20, 2014 @ 2:00 p.m. ET / 11:00 a.m. PT Are you wanting to target two or more platforms such as iOS, Android, and/or Windows? You are not alone. 90% of enterprises today are targeting two or more platforms. Attend this eSeminar to discover how mobile app developers can rely on one IDE to create applications across platforms and approaches (web, native, and/or hybrid), saving time, money, and effort and introducing apps to market faster. You'll learn the trade-offs for gaining long …

  • Live Event Date: October 29, 2014 @ 11:00 a.m. ET / 8:00 a.m. PT Are you interested in building a cognitive application using the power of IBM Watson? Need a platform that provides speed and ease for rapidly deploying this application? Join Chris Madison, Watson Solution Architect, as he walks through the process of building a Watson powered application on IBM Bluemix. Chris will talk about the new Watson Services just released on IBM bluemix, but more importantly he will do a step by step cognitive …

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds