I looked at Dave Merner’s article on direct SQL calls with ODBC and some subsequent correspondence regarding non
MFC class usage. Some readers were interested in an STL solution and I have made the following changes to the presented code:
- The CPtrArray has been replaced by a standard STL vector.
- The Column classes have been coded to orthodox canonical form of class for
STL usage. - Many of the ODBC calls are deprecated and have been replaced with later
ODBC function calls. - The demo project contains some example code usage.
- Worthwhile reader contributions have been applied to the code.
The code and project require a DSN to the MS Northwind sample database in
order to run correctly and this short article is offered as a technique for
using simple STL container classes and ODBC.
Thanks to all at codeguru for sharing code and ideas.
Example code usage also available in the demo project:
try { cout << "Connecting to Sample Northwind database..." << endl; CIDSQLDirect sqlDirect; // Our direct ODBC class if (( nRetCode = sqlDirect.Connect("Northwind") ) != SQL_SUCCESS ) return( nRetCode ); if (( nRetCode = sqlDirect.ExecuteSQL("SELECT COUNT(*) FROM Employees")) != SQL_SUCCESS ) return( nRetCode ); if (( nRetCode = sqlDirect.Fetch() ) != SQL_SUCCESS ) return( nRetCode ); // Fetch the result from this COUNT(*) string strFetch = sqlDirect.GetCol( 1 ); cout << "Employees Table contains (" << strFetch << ") entries" << endl; // This query returns all data in the Employees table if (( nRetCode = sqlDirect.ExecuteSQL("SELECT * FROM Employees")) != SQL_SUCCESS ) return( nRetCode ); int nColumns = sqlDirect.GetNumColumns(); cout << "Query returned (" << nColumns << ") columns" << endl; sqlDirect.PrintColumnNames(); DisplayData( sqlDirect ); // Print the information now contained } catch( ... ) { cout << "SQL Exception Caught!" << endl; }