The following table describes the compatibility of the types of applications and drivers defined previously in this section.
|ODBC 3.8 driver||ISO and Open Group–compliant driver|
|16-bit application, any version||Compatible||Compatible||Compatible||Compatible|
|Pure 2.x application||Compatible||Compatible||Compatible||Not compatible|
|Pure 2.x recompiled application||Compatible||Compatible||Compatible||Not compatible|
|Pure 2.x Unicode application||Compatible||Compatible||Compatible||Not Compatible|
|Pure Open Group and ISO–compliant application||Not compatible||Compatible||Compatible||Compatible|
|Pure 3.0 application||Not compatible||Compatible||Compatible||Not compatible|
|Pure 3.5 application||Not compatible||Compatible||Compatible||Not compatible|
|Pure 3.8 (or higher) application||Not compatible ||Not compatible ||Compatible||Not compatible |
|Replaced application||Compatible||Compatible||Compatible||Not compatible|
 The application must recompile using ODBC 3.5 (or higher) headers with the UNICODE option (if it is a Unicode application) and must set ODBCVER to 0x0250.
 The application must compile using ODBC 3.5 (or higher)headers and link with the ODBC Driver Manager. It must also set the header flag ODBC_STD.
 This configuration can potentially fail to work because there are features in ODBC 2.x that are not in the standards, such as bookmarks.
 This configuration can potentially fail to work because there are features in ODBC 3.x that are not in the standards, such as bookmarks.
 This configuration can potentially fail because there are features in ODBC 3.8 that are not in ODBC 2.x or 3.x drivers, such as driver-specific C Data Types in ODBC.
Driver Manager Compatibility
An ODBC 3.0 application that must operate with all Driver Manager versions should do the following on startup:
Allocate an environment handle.
Set the SQL_ATTR_ODBC_VERSION environment attribute to SQL_OV_ODBC3_80. If the Driver Manager returns SQL_ERROR, the Driver Manager is older than 3.8. Reset SQL_ATTR_ODBC_VERSION to SQL_OV_ODBC3 or SQL_OV_ODBC2, as appropriate, to correspond to the Driver Manager.
Allocate a connection handle.
Make a connection.
Call SQLGetInfo for SQL_DRIVER_ODBC_VER to determine the driver version. If the driver is an ODBC 3.8 driver, you can use driver-specific C types. Otherwise, do not use driver-specific C data types.
Note that a recompiled ODBC 3.x application can use ODBC 3.8 features other than driver-specific C types without specifying SQL_OV_ODBC3_80 for SQL_ATTR_ODBC_VERSION. This is similar to a recompiled ODBC 2.x application using ODBC 3.x features.
Using SQLCancelHandle in an Application Compatible with all Driver Managers
Because SQLCancelHandle Function is not supported in Driver Managers that were released before Windows 7, an application cannot be loaded in older versions of Windows if it calls SQLCancelHandle directly. To work with all versions of Driver Managers and use SQLCancelHandle on new versions of Windows, an application should call SQLCancelHandle indirectly by using LoadLibrary and GetProcAddress.