複製鏈接
請複製以下鏈接發送給好友

開放式數據庫連接

鎖定
一種數據訪問應用程序接口API),支持對可使用 ODBC 驅動程序的任何數據源的訪問。
開放數據庫連接(Open Database Connectivity,ODBC)是微軟公司開放服務結構(WOSA,Windows Open Services Architecture)中有關數據庫的一個組成部分,它建立了一組規範,並提供了一組對數據庫訪問的標準API(應用程序編程接口)。這些API利用SQL來完成其大部分任務。ODBC本身也提供了對SQL語言的支持,用户可以直接將SQL語句送給ODBC。開放數據庫互連定義的訪問數據庫API規範,這些API獨立於不同廠商的DBMS,也獨立於具體的編程語言。ODBC規範後來被X/OPEN和ISO/IEC採納,作為SQL標準的一部分,具體內容可以參看《ISO/IEC 9075-3:1995 (E) Call-Level Interface (SQL/CLI)》等相關的標準文件。
中文名
開放數據庫互連
外文名
ODBC
提出者
Microsoft
類    型
計算機科學術語

開放式數據庫連接1. 產生和發展

關係型數據庫產生後很快就成為數據庫系統的主流產品,由於每個DBMS廠商都有自己的一套標準,人們很早就產生了標準化的想法,於是產生了SQL,由於其語法規範逐漸為人所接受,成為RDBMS上的主導語言。最初,各數據庫廠商為了解決互連的問題,往往提供嵌入式SQL API,用户在客户機端要操作系統中的RDBMS時,往往要在程序中嵌入SQL語句進行預編譯。由於不同廠商在數據格式、數據操作、具體實現甚至語法方面都具有不同程度的差異,所以彼此不能兼容。
長期以來,這種API的非規範情況令用户和RDBMS廠商都不能滿意。在80年代後期,一些著名的廠商結成了SQL Access Group(簡稱SAG),提出了SQL API的規範核心:調用級接口(Call Level Interface),簡稱CLI。
1991年11月,微軟宣佈了ODBC,次年推出可用版本。1992年2月,推出了ODBC SDK 2.0版。ODBC基於SAG的SQL CAE草案所規定的語法,共分為Core、Level 1、 Level 2三種定義,分別規範了22、16、13共51條命令,其中29條命令甚至超越了SAG CLI中原有的定義,功能強大而靈活。它還包括標準的錯誤代碼集、標準的連接和登錄DBMS方法、標準的數據類型表示等。
由於ODBC思想上的先進性,且沒有同類的標準或產品與之競爭,它一枝獨秀,推出後僅僅兩三年就受到了眾多廠家與用户的青睞,成為一種廣為接受的標準。常見的DBMS都提供了ODBC的驅動接口。ODBC成為客户機/服務器系統中的一個重要支持技術。

開放式數據庫連接2. 基本思想與特點

ODBC的基本思想是為用户提供簡單、標準、透明的數據庫連接的公共編程接口,開發廠商根據ODBC的標準去實現底層的驅動程序,這個驅動對用户是透明的,並允許根據不同的DBMS採用不同的技術加以優化實現,這就利於不斷吸收新的技術而趨完善。
這同時也就是數據庫驅動的思想。ODBC出現以後,用户安裝不同的DBMS驅動就可用同樣的SQL語句實現在不同DBMS上進行同樣的操作,而且無需預編譯。ODBC帶來了數據庫連接方式的變革。在傳統方式中,開發人員要熟悉多個DBMS及其API,一旦DBMS端出現變動,則往往導致用户端系統重新編建或者源代碼的修改,這給開發和維護工作帶來了很大困難。在ODBC方式中,不管底層網絡環境如何,也無論採用何種DBMS,用户在程序中都使用同一套標準代碼,無需逐個瞭解各DBMS及其API的特點,源程序不因底層的變化而重新編建或修改,從而減輕了開發維護的工作量,縮短了開發週期。
概括起來,ODBC具有以下靈活的特點:
1)使用户程序有很高的互操作性,相同的目標代碼適用於不同的DBMS;特定 DBMS 的一個 ODBC 驅動程序允許任何已啓用 ODBC 的應用程序成為 ODBC 客户端。
2)由於ODBC的開放性,它為程序集成提供了便利,為客户機/服務器結構提供了技術支持。
3)由於應用與底層網絡環境和DBMS分開,簡化了開發維護上的困難。應用程序開發人員不需要修改他們的應用程序,即可讓它們可以訪問多個後端中的數據。只要特定後端有 ODBC 驅動程序,支持 ODBC 的前端可以訪問它。

開放式數據庫連接3. 體系結構和實現

ODBC是依靠分層結構來實現的,如此可保證其標準性和開放性。ODBC共分為四層:應用程序、驅動程序管理器、驅動程序和數據源。微軟公司對ODBC規程進行了規範,它為應用層的開發者和用户提供標準的函數、語法和錯誤代碼等,微軟還提供了驅動程序管理器,它在Windows中是一個動態鏈接庫即ODBC.DLL。驅動程序層由微軟、DBMS廠商或第三開發商提供,它必須符合ODBC的規程,對於Oracle,它是ORA6WIN.DLL,對於SQL Server,它是SQLSRVR.DLL。

開放式數據庫連接3.1應用程序層

使用ODBC接口的應用程序可執行以下任務:①請求與數據源的連接和會話(SQLConnect); ②向數據源發送SQL請求(SQLExecDirct或SQLExecute); ③對SQL請求的結果定義存儲區和數據格式; ④請求結果; ⑤處理錯誤; ⑥如果需要,把結果返回給用户; ⑦對事務進行控制,請求執行或回退操作(SQLTransact); ⑧終止對數據源的連接(SQLDisconnect)。

開放式數據庫連接3.2驅動程序管理器

由微軟提供的驅動程序管理器是帶有輸入庫的動態連接庫ODBC.DLL,其主要目的是裝入驅動程序,此外還執行以下工作:
①處理幾個ODBC初始化調用;
②為每一個驅動程序提供ODBC函數入口點
③為ODBC調用提供參數和次序驗證。

開放式數據庫連接3.3驅動程序(Driver)

驅動程序是實現ODBC函數和數據源交互的DLL,當應用程序調用SQL Connect或者SQLDriver Connect函數時,驅動程序管理器裝入相應的驅動程序,它對來自應用程序的ODBC函數調用進行應答,按照其要求執行以下任務:①建立與數據源的連接;②向數據源提交請求;③在應用程序需求時,轉換數據格式;④返回結果給應用程序;⑤將運行錯誤格式化為標準代碼返回;⑥在需要時説明和處理光標。
以上這些功能都是對應用程序層功能的具體實現。驅動程序的配置方式可以劃分為以下兩種。
1)單層次(single-tier)這種方式下,驅動程序要處理ODBC調用SQL語句,並直接操縱數據庫,因此具有數據存取功能。這種配置最常見的是同一台微機之上異種數據庫通過ODBC存取,如在Powerbuilder中存取XBase、Excel、Paradox等數據文件。
2)多層次(multiple-tier)這種配置中驅動程序僅僅處理ODBC調用,而將SQL語句交給服務器執行,然後返回結果。這種情況往往是應用程序、驅動程序管理器、驅動程序駐留在客户機端,而數據源和數據存取功能放在服務器端。譬如用Foxpro或Excel存取SQL Server或Oracle上的數據。
有時在以上兩者之間加上網關以解決通信協議的轉換等問題,這時驅動程序要將請求先傳送給網關。

開放式數據庫連接3.4數據源

由用户想要存取的數據和它相關的操作系統、DBMS及網絡環境組成。

開放式數據庫連接4. 一致性級別

從應用程序觀點來看,最理想的情況是每個數據源和驅動程序都支持同一套ODBC函數調用和SQL語句。但是由於形形色色的DBMS在實現上有很大的差異,它們所依賴的系統和環境也各不相同,在對ODBC支持的程度上就不一致。一致性級別(Conformance Levels)建立了對眾多功能的標準劃分,為應用程序和驅動程序提供幫助和選擇的依據。它劃定了驅動程序所支持的ODBC函數和SQL語句的範圍,我們可以用SQLGetInfo、SQLGetFunctions、SQLTypeInfo三個函數獲知驅動程序所支持的功能集。
ODBC從API和SQL語法兩方面劃分級別。

開放式數據庫連接4.1API的一致性

ODBC將函數調用劃分為三級。
1)核心API 它包括了與SAG的CLI相匹配的基本功能,包括:分配與釋放環境、連接及語句句柄;連接到數據源;準備並執行SQL語句或立即執行SQL語句;為SQL語句和結果列中的參數分配存儲器;從結果中檢索數據,檢索結果的信息;提交和撤消事務處理;檢索錯誤信息。
2)一級API 它包括了核心API的全部功能,比如用特定驅動程序的對話框連接到數據源;設置和查詢語句值和連接選項;送部分或全部參數值;檢索部分和全部結果;檢索目錄信息;檢索關於驅動程序和數據源的信息。
3)二級API 其功能包括核心和一級API的全部功能;瀏覽可獲得的連接和可獲得的數據源列表;發送參數值數組,檢索結果數組;檢索參數個數及參數描述;應用可捲動的光標;檢索SQL語句和本機表格;檢索各種目錄信息;調用轉換DLL。

開放式數據庫連接4.2SQL語法的一致性級別

從SQL方面可劃分為最小的SQL語法、核心SQL語法和擴展SQL語法三個等級。
ODBC現在看來是一個比較古老的東西,在1996年左右就比較定型了,其最新的版本是 3.8,MICROSOFT也不打算對它做什麼大的更新。然而,正因為它是一個比較成熟和古老的規範,ODBC在大多數DBMS上都可以使用,可以説一個像樣的DBMS都應該支持ODBC 3.0或以上的版本。

開放式數據庫連接5. 使用 ODBC 的示例

1)Access 前端使用 Oracle ODBC 驅動程序(Access 1.1 隨附)訪問 Oracle 後端的數據。
2)Visual Basic 前端使用 dBASE ODBC 驅動程序(它是 MS ODBC 數據庫驅動程序包的一部分)訪問 dBASE 後端的數據。
3)使用 C+ODBC SDK+Win SDK 編寫的 C 應用程序使用 Rochester Software 提供的 AS/400 ODBC 驅動程序訪問 AS/400 中的數據。 [1] 
參考資料