---
title: "Compatibility Matrix | Microsoft Docs"
ms.custom: ""
ms.date: "01/19/2017"
ms.prod: sql
ms.prod_service: connectivity
ms.reviewer: ""
ms.technology: connectivity
ms.topic: conceptual
helpviewer_keywords:
- "driver compatibility issues [ODBC]"
- "ODBC drivers [ODBC], backward compatibility"
- "backward compatibility [ODBC], application and driver compatibility"
- "compatibility [ODBC], application and driver compatibility"
- "application compatibility issues [ODBC]"
- "application upgrades [ODBC], compatibility matrix"
- "upgrading applications [ODBC], compatibility matrix"
ms.assetid: 0690b463-15a1-48fa-9d0b-9cc9e5bf7fc6
author: David-Engel
ms.author: v-daenge
---
# Compatibility Matrix
The following table describes the compatibility of the types of applications and drivers defined previously in this section.
|Application type
and version|32-bit ODBC
*2.x* driver|ODBC *3.x*
driver|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[3]|
|Pure *2.x* recompiled application|Compatible|Compatible[1]|Compatible[1]|Not compatible[3]|
|Pure *2.x* Unicode application|Compatible|Compatible[1]|Compatible[1]|Not Compatible[3]|
|Pure Open Group and ISO-compliant application|Not compatible|Compatible[2]|Compatible[2]|Compatible[2]|
|Pure 3.0 application|Not compatible|Compatible|Compatible|Not compatible[4]|
|Pure 3.5 application|Not compatible|Compatible|Compatible|Not compatible[4]|
|Pure 3.8 (or higher) application|Not compatible [5]|Not compatible [5]|Compatible|Not compatible [4]|
|Replaced application|Compatible|Compatible|Compatible|Not compatible[3]|
[1] 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.
[2] 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.
[3] This configuration can potentially fail to work because there are features in ODBC *2.x* that are not in the standards, such as bookmarks.
[4] This configuration can potentially fail to work because there are features in ODBC *3.x* that are not in the standards, such as bookmarks.
[5] 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](../../../odbc/reference/develop-app/c-data-types-in-odbc.md).
## 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](../../../odbc/reference/syntax/sqlcancelhandle-function.md) 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.**
## See Also
[What's New in ODBC 3.8](../../../odbc/reference/what-s-new-in-odbc-3-8.md)