The Open Database Connectivity (ODBC) interface permits maximum interoperability - a single application can access different database management systems. This allows an application developer to develop, compile, and ship an application without targeting a specific DBMS. Users can then add modules called database drivers that link the application to their choice of database management systems.
In the traditional database world, “application” has usually meant a program that performed a specific database task with a specific DBMS in mind such as payroll, financial analysis, or inventory management. Such applications have typically been written using embedded SQL. While embedded SQL is efficient and is portable across different hardware and operating system environments, the source code must be recompiled for each new environment.
Embedded SQL is not optimal for applications that need to analyse data stored in databases such as DB2 and Oracle, and prefer to do so from within a familiar application interface, such as Microsoft Excel spreadsheet. Under the traditional approach to database access, one version of Microsoft Excel would have to be precompiled with the IBM precompiler and another with the Oracle precompiler, clearly a radical departure from simply buying a single packaged product.
ODBC offers a new approach: provide a separate program to extract the database information, and then have a way for applications to import the data. Since there are, and probably always will be, many viable communication methods, data protocols, and DBMS capabilities, the ODBC solution is to allow different technologies to be used by defining a standard interface. This solution leads to the idea of database drivers - dynamic link libraries that an application can invoke on demand to gain access to a particular data source through a particular communications method, much like a printer driver running under Windows. ODBC provides the standard interface that allows both application writers and providers of libraries to shuttle data between applications and data sources.