ODBC的產生和發展
關係型資料庫產生後很快就成為資料庫系統的主流產品,由於每個DBMS廠商都有自己的一套標準,人們很早就產生了標準化的想法,於是產生了SQL,由於其語法規範逐漸為人所接受,成為RDBMS上的主導語言。最初,各資料庫廠商為了解決互連的問題,往往提供嵌入式SQL API,用戶在客戶機端要作業系統中的RDBMS時,往往要在程式中嵌入SQL語句進行預編譯。由於不同廠商在數據格式、數據操作、具體實現甚至語法方面都具有不同程度的差異,所以彼此不能兼容。
長期以來,這種API的非規範情況令用戶和RDBMS廠商都不能滿意。在80年代後期,一些著名的廠商包括Oracle、Sybase、Lotus、Ingres、Informix、HP、DEC等結成了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思想上的先進性,且沒有同類的標準或產品與之競爭,它一枝獨秀,推出後僅僅兩三年就受到了眾多廠家與用戶的青睞,成為一種廣為接受的標準。目前,已經有130多家獨立廠商宣布了對ODBC的支持,常見的DBMS都提供了ODBC的驅動接口,這些廠商包括Oracle、Sybase、Informix、Ingres、IBM(DB/2)、DEC(RDB)、HP(ALLBASE/SQL)、Gupta、Borland(Paradox)等。目前,ODBC已經成為客戶機/伺服器系統中的一個重要支持技術。
ODBC的基本思想與特點
ODBC的基本思想是為用戶提供簡單、標準、透明的資料庫連線的公共編程接口,開發廠商根據ODBC的標準去實現底層的驅動程式,這個驅動對用戶是透明的,並允許根據不同的DBMS採用不同的技術加以最佳化實現,這就利於不斷吸收新的技術而趨完善。
這同時也就是資料庫驅動的思想,它很類似於Windows中列印驅動的思想。在Windows中,用戶安裝不同的列印驅動程式,使用同樣一條列印語句或操作,就可很容易地實現在不同印表機上列印輸出,而不需要了解內部的具體原理。ODBC出現以後,用戶安裝不同的DBMS驅動就可用同樣的SQL語句實現在不同DBMS上進行同樣的操作,而且無需預編譯。ODBC帶來了資料庫連線方式的變革,如圖1所示。在傳統方式中,開發人員要熟悉多個DBMS及其API,一旦DBMS端出現變動,則往往導致用戶端系統重新編建或者原始碼的修改,這給開發和維護工作帶來了很大困難。在ODBC方式中,不管底層網路環境如何,也無論採用何種DBMS,用戶在程式中都使用同一套標準代碼,無需逐個了解各DBMS及其API的特點,源程式不因底層的變化而重新編建或修改,從而減輕了開發維護的工作量,縮短了開發周期。
@@12W03500.GIF;圖1 資料庫連線方式的轉變@@
概括起來,ODBC具有以下靈活的特點:
1. 使用戶程式有很高的互操作性,相同的目標代碼適用於不同的DBMS;
2. 由於ODBC的開放性,它為程式集成提供了便利,為客戶機/伺服器結構提供了技術支持;
3. 由於套用與底層網路環境和DBMS分開,簡化了開發維護上的困難。
ODBC的體系結構和實現
ODBC是依靠分層結構來實現的,如此可保證其標準性和開放性。圖2所示為ODBC的體系結構,它共分為四層:應用程式、驅動程式管理器、驅動程式和數據源。微軟公司對ODBC規程進行了規範,它為套用層的開發者和用戶提供標準的函式、語法和錯誤代碼等,微軟還提供了驅動程式管理器,它在Windows中是一個動態程式庫即ODBC.DLL。驅動程式層由微軟、DBMS廠商或第三開發商提供,它必須符合ODBC的規程,對於Oracle,它是ORA6WIN.DLL,對於SQL Server,它是SQLSRVR.DLL。
@@12W03501.GIF;圖2 ODBC體系結構@@
下面我們詳細介紹各層的功能。
應用程式層(Application)
使用ODBC接口的應用程式可執行以下任務:
①請求與數據源的連線和會話(SQLConnect); ②向數據源傳送SQL請求(SQLExecDirct或SQLExecute); ③對SQL請求的結果定義存儲區和數據格式; ④請求結果; ⑤處理錯誤; ⑥如果需要,把結果返回給用戶; ⑦對事務進行控制,請求執行或回退操作(SQLTransact); ⑧終止對數據源的連線(SQLDisconnect)。
驅動程式管理器(Driver Manager)
由微軟提供的驅動程式管理器是帶有輸入庫的動態連線庫ODBC.DLL,其主要目的是裝入驅動程式,此外還執行以下工作:
①處理幾個ODBC初始化調用;
②為每一個驅動程式提供ODBC函式入口點;
③為ODBC調用提供參數和次序驗證。
驅動程式(Driver)
驅動程式是實現ODBC函式和數據源互動的DLL,當應用程式調用SQL Connect或者SQLDriver Connect函式時,驅動程式管理器裝入相應的驅動程式,它對來自應用程式的ODBC函式調用進行應答,按照其要求執行以下任務:
①建立與數據源的連線;
②向數據源提交請求;
③在應用程式需求時,轉換數據格式;
④返回結果給應用程式;
⑤將運行錯誤格式化為標準代碼返回;
⑥在需要時說明和處理游標。
以上這些功能都是對應用程式層功能的具體實現。驅動程式的配置方式可以劃分為以下兩種。
(1)單層次(single-tier) 這種方式下,驅動程式要處理ODBC調用SQL語句,並直接操縱資料庫,因此具有數據存取功能。這種配置最常見的是同一台微機之上異種資料庫通過ODBC存取,如在Powerbuilder中存取XBase、Excel、Paradox等數據檔案,如圖3所示。@@12W03502.GIF;圖3 一層配置示意圖@@
(2)多層次(multiple-tier) 這種配置中驅動程式僅僅處理ODBC調用,而將SQL語句交給伺服器執行,然後返回結果。這種情況往往是應用程式、驅動程式管理器、驅動程式駐留在客戶機端,而數據源和數據存取功能放在伺服器端。譬如用Foxpro或Excel存取SQL Server或Oracle上的數據,如圖4所示。
@@12W03503.GIF;圖4 二層配置示意圖@@
有時在以上兩者之間加上網關以解決通信協定的轉換等問題,這時驅動程式要將請求先傳送給網關,如訪問DEC RDB和IBM AS/400時的配置,如圖5所示。
@@12W03504.GIF;圖5 三層配置示意圖@@
數據源
由用戶想要存取的數據和它相關的作業系統、DBMS及網路環境組成。
一致性級別
從應用程式觀點來看,最理想的情況是每個數據源和驅動程式都支持同一套ODBC函式調用和SQL語句。但是由於形形色色的DBMS在實現上有很大的差異,它們所依賴的系統和環境也各不相同,在對ODBC支持的程度上就不一致。一致性級別(Conformance Levels)建立了對眾多功能的標準劃分,為應用程式和驅動程式提供幫助和選擇的依據。它劃定了驅動程式所支持的ODBC函式和SQL語句的範圍,我們可以用SQLGetInfo、SQLGetFunctions、SQLTypeInfo三個函式獲知驅動程式所支持的功能集。
ODBC從API和SQL語法兩方面劃分級別。
1. API的一致性
ODBC將函式調用劃分為三級。
(1)核心API 它包括了與SAG的CLI相匹配的基本功能,包括:分配與釋放環境、連線及語句句柄;連線到數據源;準備並執行SQL語句或立即執行SQL語句;為SQL語句和結果列中的參數分配存儲器;從結果中檢索數據,檢索結果的信息;提交和撤消事務處理;檢索錯誤信息。
(2)一級API 它包括了核心API的全部功能,比如用特定驅動程式的對話框連線到數據源;設定和查詢語句值和連線選項;送部分或全部參數值;檢索部分和全部結果;檢索目錄信息;檢索關於驅動程式和數據源的信息。
(3)二級API 其功能包括核心和一級API的全部功能;瀏覽可獲得的連線和可獲得的數據源列表;傳送參數值數組,檢索結果數組;檢索參數個數及參數描述;套用可捲動的游標;檢索SQL語句和本機表格;檢索各種目錄信息;調用轉換DLL。
2. SQL語法的一致性級別
從SQL方面可劃分為最小的SQL語法、核心SQL語法和擴展SQL語法三個等級。
五、ODBC的套用與前景
ODBC的出現給用戶描繪了一個誘人的前景,即網路中的Windows用戶可以方便地訪問各種資料庫。現在,在微軟推出的許多產品中都提供了ODBC支持,如Visal Basic 3.0、Visal C1.5、Excel 5.0、Word 6.0、FoxPro、Access等。同時其他一些套用軟體和開發工具也提供了對ODBC的支持。因此用戶只要安裝不同的ODBC驅動程式,就可存取相應的資料庫產品,而不管用戶使用何種前台套用軟體,也不管後台是何種資料庫,這個存取的過程是一致的。
但是由於ODBC產生的時間還不長,其套用也同時存在著一些問題。首先,它的層次比較多,表現在性能上比專有的API要慢,這是其標準化和開發性所帶來的必要的代價;其次,由於ODBC規定了三個層次的一致性級別,應用程式與驅動程式之間的匹配就會出現一些問題和矛盾,比如某些驅動程式支持的級別比較低,而應用程式要求的比較高;再者,由於不同的驅動程式為不同的開發商所開發,測試工作不能統一,而現有的開發和測試工具並不很完善;同時,在非SQL的資料庫系統上的套用也存在一些問題。
微軟公司將ODBC作為一項很重要的技術,它已承諾進一步改進ODBC技術,為驅動程式開發者提供更先進的開發和測試工具,還將交付系統管理和監控工具,它還將與DBMS廠商和第三方廠商建立更密切的合作,以期使驅動程式支持更高級別的一致性,並在規範化方面有所完善。目前,ODBC已為資料庫供應商組織內部所認可,同時為眾多套用軟體廠商和第三方開發商所使用,相信隨著SQL的推廣和規範,用戶和開發商會更加依賴於這一技術。