ODBC(Open Database Connectivity,開放數據庫互連)提供了一種標準的API(應用程序編程接口)方法來訪問數據庫管理系統(DBMS)。這些API利用SQL來完成其大部分任務。ODBC本身也提供了對SQL語言的支持,用戶可以直接將SQL語句送給ODBC。ODBC的設計者們努力使它具有最大的獨立性和開放性。
在ODBC誕生之前,如果要開發數據庫應用程序,則必須要使用數據庫廠商隨數據庫產品一同發布的一些工具集來訪問數據庫,或者在程序中使用嵌入式SQL來訪問數據庫。當時,對於訪問數據庫的方法,缺乏一個基於C語言的統一編程接口。在這種背景下,微軟於1992年發表了ODBC。之後,X/Open組織以及ISO標準化組織基於ODBC 3.0的規範,進一步進行了標準化,於1995年發表了SQL/CLI標準。該標準已經成為了SQL標準的一部分。
版本歷史:
- ODBC 1.0:發表於1992年9月
- ODBC 2.0:發表於1994年
- ODBC 3.0:發表於1995年
- ODBC 3.5:發表於1997年
- ODBC 3.8:發表於2009年,和Windows 7一同發表[1]
- ODBC 4.0:開發於2016年6月[2] ,於2017年9月發布的SQL Server 2017和2018年底的其他桌面驅動程式首次實現[3]在Github的最終規範 (頁面存檔備份,存於網際網路檔案館)。
ODBC的運用形態通常是由應用程序經過一個稱之為ODBC管理器的工具,創建一個DSN,指明需要調用的ODBC驅動程序,從而訪問對應的數據庫。對於用戶的應用程序而言,ODBC驅動程序是相對不可見的。用戶只需要在ODBC管理器中配置相應的數據庫的數據源信息,並登錄相應的ODBC驅動程序即可。DSN分為三種:
也可以用連接字符串而不需要事先創建DSN,例如
connstr="DRIVER={SQL SERVER};SERVER=servername;UID=xyz;PWD=xxx"
connstr="DRIVER={Microsoft Access Driver};SERVER=D:\abc\defg.mdb"
各個數據庫廠商通常都為自己的數據庫實現了ODBC驅動程序。從Oracle、DB2、SQL Server到Access數據庫,都實現了面向各自數據庫產品的數據驅動程序。
而對於ODBC管理器,目前主要存在以下幾種實現:
- Microsoft ODBC
- 微軟提供的一個實現,目前在大部分Windows操作系統上可以找到它。
- unixODBC
- unixODBC項目為非Windows操作系統(如各版本的Linux、Unix以及Mac OS)提供的一個實現。unixODBC的實現涵蓋了ODBC 3.0中的所有API規範,並且提供了一個類似於Microsoft ODBC那樣的GUI形式的配置界面供用戶進行數據源的配置。unixODBC的代碼在GPL協議下公開,目前該項目是由Easysoft的Nick Gorham進行管理。unixODBC現在已經是很多Linux發行版的標準安裝模式下的一個必要組件。
- iODBC
主條目:iODBC
- iODBC項目(Independent Open DataBase Connectivity)的目標是提供一個平台無關的實現,該項目目前由Openlink Software進行管理。其代碼是在LGPL協議以及BSD協議下發布。蘋果公司從Mac OS X v10.2時代開始,便將iODBC綁定至Mac OS操作系統中。
What's New in ODBC 3.8. Microsoft. [2010-01-13]. (原始內容存檔於2010-01-11). Windows 7 includes an updated version of ODBC, ODBC 3.8.
Rukmangathan, Krishnakumar. A new release of ODBC for Modern Data Stores. Microsoft Data Access / SQL BI Technologies Blog. Microsoft. 2016-06-07 [2022-05-10]. (原始內容存檔於2019-01-15). After more than 15 years since the last release, Microsoft is looking at updating the Open Data Base Connectivity (ODBC) specification.
- ADO(ActiveX Data Objects)
- MDAC(Microsoft Data Access Components)
- JDBC(Java Database Connectivity)