OLE-DB與ODBC

1.OLE-DB
      OLE-DB(Object Linking and Embedding, Database),是微軟的戰略性的通向不同的數據源的低級應用程序接口。OLE-DB不僅包括微軟資助的標準數據接口開放數據庫連通性(ODBC)的結構化查詢語言(SQL)能力,還具有面向其他非SQL數據類型的通路。 
      作爲微軟的組件對象模型(COM)的一種設計,OLE-DB是一組讀寫數據的方法(在過去可能被稱爲渠道)。OLD-DB中的對象主要包括數據源對象、階段對象、命令對象和行組對象。使用OLE-DB的應用程序會用到如下的請求序列:初始化OLE連接到數據源、發出命令、處理結果、釋放數據源對象並停止初始化OLE。
      對象連接與嵌入,簡稱OLE。OLE不僅是桌面應用程序集成,而且還定義和實現了一種允許應用程序作爲軟件“對象”(數據集合和操作數據的函數)彼此進行“連接”的機制,這種連接機制和協議稱爲部件對象模型。 OLE是一種面嚮對象的技術,利用這種技術可開發可重複使用的軟件組件(COM)。
      OLE-DB 將傳統的數據庫系統劃分爲多個邏輯組件,這些組件之間相對獨立又相互通信。這種組件模型中的各個部分被冠以不同的名稱:
      數據提供者(Data Provider):提供數據存儲的軟件組件,小到普通的文本文件、大到主機上的複雜數據庫,或者電子郵件存儲,都是數據提供者的例子。有的文檔把這些軟件組件的開發商也稱爲數據提供者。
      數據服務提供者(Data Service Provider):位於數據提供者之上、從過去的數據庫管理系統中分離出來、獨立運行的功能組件,例如查詢處理器和遊標引擎(Cursor Engine),這些組件使得數據提供者提供的數據以表狀數據(Tabular Data)的形式向外表示(不管真實的物理數據是如何組織和存儲的),並實現數據的查詢和修改功能。SQL Server 7.0 的查詢處理程序就是這種組件的典型例子。
      業務組件(Business Component):利用數據服務提供者、專門完成某種特定業務信息處理、可以重用的功能組件。分佈式數據庫應用系統中的中間層(Middle-Tier)就是這種組件的典型例子。
      數據消費者(Data Consumer):任何需要訪問數據的系統程序或應用程序,除了典型的數據庫應用程序之外,還包括需要訪問各種數據源的開發工具或語言。
2.ODBC
     ODBC(Open Database Connectivity,開放數據庫互連)提供了一種標準的API(應用程序編程接口)方法來訪問DBMS。這些API利用SQL來完成其大部分任務。ODBC本身也提供了對SQL語言的支持,用戶可以直接將SQL語句送給ODBC。ODBC的設計者們努力使它具有最大的獨立性和開放性:與具體的編程語言無關,與具體的數據庫系統無關,與具體的操作系統無關。微軟公司在1993年以DLL集的方式發佈了世界上第一個ODBC產品,現在成爲了微軟開放服務結構(WOSA,Windows Open Services Architecture)中,有關數據庫的一個組成部分。微軟的ODBC產品其實就是一個ODBC的驅動管理器,提供一個ODBC應用程序到某種ODBC驅動的接口。在UNIX系統上,有兩個開源的ODBC驅動管理器,unixODBC和iODBC。 
     一個基於ODBC的應用程序對數據庫的操作不依賴任何DBMS,不直接與DBMS打交道,所有的數據庫操作由對應的DBMS的ODBC驅動程序完成。也就是說,不論是FoxPro、Access還是Oracle數據庫,均可用ODBC API進行訪問。由此可見,ODBC的最大優點是能以統一的方式處理所有的數據庫。
      一個完整的ODBC由下列幾個部件組成:
      應用程序(Application)。
      ODBC管理器(Administrator):該程序位於Windows 95控制面板(Control Panel)的32位ODBC內,其主要任務是管理安裝的ODBC驅動程序和管理數據源。
      驅動程序管理器(Driver Manager): 驅動程序管理器包含在ODBC32.DLL中,對用戶是透明的。其任務是管理ODBC驅動程序,是ODBC中最重要的部件。
      ODBC API
      ODBC 驅動程序:是一些DLL,提供了ODBC和數據庫之間的接口。
      數據源:數據源包含了數據庫位置和數據庫類型等信息,實際上是一種數據連接的抽象。
      應用程序要訪問一個數據庫,首先必須用ODBC管理器註冊一個數據源,管理器根據數據源提供的數據庫位置、數據庫類型及ODBC驅動程序等信息,建立起ODBC與具體數據庫的聯繫。這樣,只要應用程序將數據源名提供給ODBC,ODBC就能建立起與相應數據庫的連接。
      在ODBC中,ODBC API不能直接訪問數據庫,必須通過驅動程序管理器與數據庫交換信息。驅動程序管理器負責將應用程序對ODBC API的調用傳遞給正確的驅動程序,而驅動程序在執行完相應的操作後,將結果通過驅動程序管理器返回給應用程序。 在訪問ODBC數據源時需要ODBC驅動程序的支持。
3.OLE-DB與ODBC的關係
      由於OLE-DB 和ODBC標準都是爲了提供統一的訪問數據接口,所以曾經有人疑惑:OLE-DB 是不是替代ODBC 的新標準?答案是否定的。實際上,ODBC標準的對象是基於SQL 的數據源(SQL-Based Data Source),而OLE-DB 的對象則是範圍更爲廣泛的任何數據存儲。從這個意義上說,符合ODBC標準的數據源是符合OLE-DB標準的數據存儲的子集。符合ODBC標準的數據源要符合OLE-DB 標準,還必須提供相應的OLE-DB 服務程序(Service Provider),就像SQL Server 要符合ODBC標準,必須提供SQL Server ODBC 驅動程序一樣。現在,微軟自己已經爲所有的ODBC 數據源提供了一個統一的OLE-DB 服務程序,叫做ODBC OLE DB Provider。
      ODBC OLE DB Provider 發佈之後,有人又擔心:ODBC Provider 是不是在ODBC 之上的新的層次(Layer)?如果是,那麼使用OLE DB 訪問ODBC 數據源是否將影響性能?答案也是否定的。實際上,ODBC Provider 的作用,是替換ODBC Driver Manager,作爲應用程序與ODBC 驅動程序之間的橋樑,理論上不會增加任何開銷。
 
      各部件之間的關係如圖下圖所示:
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章