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
TemplatesOLE DB Templates”