ODBCWrappers v1.08 A set of C++
classes to encapsulate ODBC on Windows
The classes provided are: CODBC::CHandle, CODBC::CEnvironment,
CODBC::CConnection, CODBC::CStatement & CODBC::CDescriptor.
CHandle provides a class based encapsulation of a SQLHANDLE handle and
the various ODBC v3 APIs which work on any SQLHANDLE type handle.
CEnvironment derives from CHandle and provides encapsulation of a ODBC
environment handle. This class allows configuration of ODBC for initial usage and
creation of connections to a database
CConnection derives from CHandle and provides encapsulation of a logical
connection to a database.
CStatement derives from CHandle and provides encapsulation of an ODBC "statement"
which allows execution of commands against a ODBC connection.
CDescriptor derives from CHandle and provides encapsulation of an ODBC "descriptor".
Finally ODBCWrappers provides a framework which provides accessor maps similar
to the macros provided by the built in Visual C++ ATL OLE DB Consumer templates.
These provide a simple mapping from code using OLE DB and these templates to equivalent
ODBC functionality. This should provide a easy migration path if you want to move
your OLE DB code to ODBC now that Microsoft have recommended that all new native
mode development should use ODBC going forward instead of OLE DB at least when talking
to SQL Server (http://blogs.msdn.com/b/sqlnativeclient/archive/2011/08/29/microsoft-is-aligning-with-odbc-for-native-relational-data-access.aspx).
Similar to the OLE DB classes, both static accessors (CODBC::CAccessor) and
dynamic accessors (CODBC::CDynamicColumnAccessor) are supported. This decision
by Microsoft was one of the driving reasons to implement ODBCWrappers in the first
place as the only ODBC classes available in Visual C++ are MFC specific (CDatabase/CRecordSet
etc) and in-line with Microsoft's strategy it really does not make sense to restrict
our usage of ODBC to MFC specific use cases going forward. The development of ODBCWrappers
took a number of months of hard work researching, developing and testing and hopefully
you should find them useful in your C++ database programming efforts.
- Provides a simple C++ Header only module to easily encapsulate ODBC.
- Supports both ASCII and UNICODE API's of ODBC on Windows.
- Provides a complete wrapping for all the ODBC v3 functionality.
- Integrates with STL's string classes and the native Windows TCHAR string
data types for easier client coding.
- Should make it easier to use ODBC from non Windows platforms going forward.
The enclosed zip file contains the ODBCWrappers
source code and a VC 2008 console based application which demonstrates most of the
classes functionality. To run correctly, this sample requires that a PJ_Test stored
procedure is created from the included "Create PJ_Test SP.sql" script
against a local installed instance of the sample AdventureWorks 2008 sample database
from Microsoft. The code also assumes that you have the SQL Native client drivers
installed for whatever PC architecture you run the sample app as.
- You are allowed to include the source code in any product (commercial, shareware,
freeware or otherwise) when your product is released in binary form.
- You are allowed to modify the source code in any way you want except you
cannot modify the copyright details at the top of each module.
- If you want to distribute source code with your application, then you are
only allowed to distribute versions released by the author. This is to maintain
a single distribution point for the source code.
V1.08 (29 April 2017)
- Updated copyright details.
- Updated the code to compile cleanly using /permissive-.
V1.07 (5 November 2015)
- Updated code to compile cleanly on VC 2015.
- Fixed compiler warnings in CHandle::SetAttr, CHandle::SetAttrU, CConnection::SetAttr,
CConnection::SetAttrU, CStatement::SetAttr & CStatement::SetAttrU related
to incorrect reinterpret_cast's.
- Implemented support for SQLCancelHandle via CHandle::Cancel.
- Implemented support for SQLCompleteAsync via CHandle:CompleteAsync
- Implemented support for setting attributes in CCommandBase::SetAttributes,
CCommandBase::Create & CCommand::Open. Thanks to Serhiy Pavlov for providing
this new feature.
V1.06 (14 March 2015)
- Added SAL annotations to all the code.
- Renamed the parameters to the methods of the classes to be consistent with
the parameter names in the latest Visual Studio 2013 header files.
V1.05 (27 February 2015)
- Updated copyright details.
- Addition of a new CCommand class based on the ATL class of the same name.
This class should make it easier to port ATL OLEDB code which is currently using
ATL::CCommand. Thanks to Serhiy Pavlov for requested this update.
V1.04 (21 February 2013)
- Addition of a new CODBCWRAPPERS_MFC_EXTENSIONS preprocessor value which
changes the wrapper classes to more tightly integrate with MFC. Internally the
classes will then use the MFC collection classes and expose a CString interface
- Following a customer request the code should now be compilable in VC 6 for
those diehards still stuck on this compiler.
V1.03 (19 February 2013)
- Updated copyright details.
- Updated code to provide default sensible values for the StrLen_or_IndPtr
parameter if it is not explicitly provided by client code.
- Updated the sample app to shown examples of inserting into a table, iterating
across the rows in a table, updating a row in a table and deleting a row from
- Removed some accidental usage of MFC TRACE and ASSERT functions and replaced
with ATL equivalents.
- Pulling in MS SQL Server extensions header file sqlext.h and associated
functionality is now optional via a new CODBCWRAPPERS_MSSQL_EXTENSIONS preprocessor
- Sample app now does not link against MFC for demonstration purposes
V1.02 (20 November 2011)
- Removed final occurrence of std::auto_ptr usage in CStatement::GetCursorName.
V1.01 (16 November 2011)
- Updated code to use std::vector instead of std::auto_ptr for allocating
SQLTCHAR temp heap arrays. Thanks to Andrey Karpov for reporting this issue.
- BrowseConnect method which returns a string& parameter now uses a TCHAR*
parameter instead of a SQLTCHAR* parameter for the first parameter
V1.0 (13 November 2011)