跳至內容

ODBC

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書

ODBCOpen 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的運用形態通常是由應用程式經過一個稱之為ODBC管理器的工具,建立一個DSN,指明需要呼叫的ODBC驅動程式,從而訪問對應的資料庫。對於使用者的應用程式而言,ODBC驅動程式是相對不可見的。使用者只需要在ODBC管理器中組態相應的資料庫的資料來源資訊,並登入相應的ODBC驅動程式即可。DSN分為三種:

  • 使用者DSN
  • 系統DSN
  • 檔案DSN

也可以用連接字串而不需要事先建立DSN,例如

connstr="DRIVER={SQL SERVER};SERVER=servername;UID=xyz;PWD=xxx"
connstr="DRIVER={Microsoft Access Driver};SERVER=D:\abc\defg.mdb"

各個資料庫廠商通常都為自己的資料庫實現了ODBC驅動程式。從OracleDB2SQL ServerAccess資料庫,都實現了面向各自資料庫產品的資料驅動程式。

而對於ODBC管理器,目前主要存在以下幾種實現:

Microsoft ODBC
微軟提供的一個實現,目前在大部分Windows作業系統上可以找到它。
unixODBC
unixODBC專案為非Windows作業系統(如各版本的LinuxUnix以及Mac OS)提供的一個實現。unixODBC的實現涵蓋了ODBC 3.0中的所有API規範,並且提供了一個類似於Microsoft ODBC那樣的GUI形式的組態介面供使用者進行資料來源的組態。unixODBC的代碼在GPL協定下公開,目前該專案是由Easysoft的Nick Gorham進行管理。unixODBC現在已經是很多Linux發行版的標準安裝模式下的一個必要組件。
iODBC
iODBC專案(Independent Open DataBase Connectivity)的目標是提供一個平台無關的實現,該專案目前由Openlink Software進行管理。其代碼是在LGPL協定以及BSD協定下發布。蘋果公司從Mac OS X v10.2時代開始,便將iODBC繫結至Mac OS作業系統中。

參考文獻

  1. ^ 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. 
  2. ^ 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. 
  3. ^ History of the Desktop Database Drivers - Open Database Connectivity (ODBC). [2022-05-10]. (原始內容存檔於2022-05-10). 

外部連結

參見

  • ADO(ActiveX Data Objects)
  • MDAC(Microsoft Data Access Components)
  • JDBC(Java Database Connectivity)