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 &ltCAccessor&ltmyNwCust&gt &gt 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 &lt&lt “That’s All Folks” &lt&lt endl;

return 1;
}
catch(…)
{
cout &lt&lt “Unknown failure” &lt&lt 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”

More by Author

Must Read