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

OLE DB

鎖定
OLE DB(OLEDB)是微軟的戰略性的通向不同的數據源的低級應用程序接口。OLE DB不僅包括微軟資助的標準數據接口開放數據庫連通性(ODBC)的結構化查詢語言(SQL)能力,還具有面向其他非SQL數據類型的通路。
外文名
OLE DB
全    稱
Object Link and embed

OLE DB基本介紹

OLE 全稱 Object Link and embed,即對象連接與嵌入。
作為微軟的組件對象模型(COM)的一種設計,OLE DB是一組讀寫數據的方法(在過去可能被稱為渠道)。OLE DB中的對象主要包括數據源對象、階段對象、命令對象和行組對象。使用OLE DB的應用程序會用到如下的請求序列: 初始化OLE 連接到數據源、發出命令、處理結果、釋放數據源對象並停止初始化OLE  Object Linking and Embedding,對象連接與嵌入,簡稱OLE技術。OLE不僅是桌面應用程序集成,而且還定義和實現了一種允許應用程序作為軟件“對象”(數據集合和操作數據的函數)彼此進行“連接”的機制,這種連接機制和協議稱為部件對象模型。
OLE 是一種面向對象的技術,利用這種技術可開發可重複使用的軟件組件(COM)。
DB(英文全稱data base,數據庫)是依照某種數據模型組織起來並存放二級存儲器中的數據集合。

OLE DB組成

OLE DB 最主要是由三個部分組合而成:
Data Providers 數據提供者
凡是透過OLE DB 將數據提供出來的,就是數據提供者。例如SQL Server 數據庫中的數據表,或是附文件名為mdb 的Access 數據庫檔案等,都是Data Provider。
Data Consumers 數據使用者
凡是使用OLE DB 提供數據的程序或組件,都是OLE DB 的數據使用者。換句話説,凡是使用ADO 的應用程序或網頁都是OLE DB 的數據使用者。
Service Components 服務組件
數據服務組件可以執行數據提供者以及數據使用者之間數據傳遞的工作,數據使用者要向數據提供者要求數據時,是透過OLE DB 服務組件的查詢處理器執行查詢的工作,而查詢到的結果則由指針引擎來管理。

OLE DB新概念

OLE DB 將傳統的數據庫系統劃分為多個邏輯組件,這些組件之間相對獨立又相互通信。這種組件模型中的各個部分被冠以不同的名稱:
數據提供者
(Data Provider)。提供數據存儲的軟件組件,小到普通的文本文件、大到主機上的複雜數據庫,或者電子郵件存儲,都是數據提供者的例子。有的文檔把這些軟件組件的開發商也稱為數據提供者。
(Data Service Provider)。位於數據提供者之上、從過去的數據庫管理系統中分離出來、獨立運行的功能組件,例如查詢處理器和遊標引擎(Cursor Engine),這些組件使得數據提供者提供的數據以表狀數據(Tabular Data)的形式向外表示(不管真實的物理數據是如何組織和存儲的),並實現數據的查詢和修改功能。SQL Server 7.0 的查詢處理程序就是這種組件的典型例子。
業務組件(Business Component)。利用數據服務提供者、專門完成某種特定業務信息處理、可以重用的功能組件。分佈式數據庫應用系統中的中間層(Middle-Tier)就是這種組件的典型例子。
數據消費者(Data Consumer)。任何需要訪問數據的系統程序或應用程序,除了典型的數據庫應用程序之外,還包括需要訪問各種數據源的開發工具或語言。

OLE DB結構設計問題

開始編寫 OLE DB 應用程序之前應考慮以下問題:
使用何種編程實現來編寫 OLE DB 應用程序?
Microsoft 提供多種庫來解決該問題:OLE DB 模板庫、OLE DB 屬性以及 OLE DB SDK 中的原始 OLE DB 接口。另外,Microsoft 還提供幫助您編寫程序的嚮導。有關這些實現的更詳細的信息,請參見 OLE DB 模板、屬性和其他實現。
是否需要編寫自己的提供程序?
大多數開發人員無需這樣。Microsoft 提供多種提供程序。無論用户何時創建一個數據連接,例如,當使用 ATL OLE DB 使用者嚮導向項目中添加使用者時,“數據鏈接屬性”對話框都將列出系統中所有被註冊的可用提供程序。如果其中一個提供程序適合於用户自己的數據存儲和數據訪問應用程序,最簡單的辦法就是使用該提供程序。但是,如果用户的數據存儲不適合所提供的類別,則必須創建自己的提供程序。有關創建提供程序的信息,請參見 OLE DB 提供程序模板及其子主題。
需要為自己的使用者提供何種級別的支持?
一些使用者可能非常簡單,另一些可能非常複雜。OLE DB 對象的功能由屬性指定。使用 ATL OLE DB 使用者嚮導創建使用者或者使用數據庫提供程序嚮導創建提供程序時,嚮導將為用户設置合適的對象屬性來提供一組標準功能。但是,如果嚮導生成的使用者類或提供程序類並不具有您需要的所有支持功能,那麼您需要查閲這些類在 OLE DB 模板庫中的接口。這些接口包裝原始 OLE DB 接口,提供附加實現以使其使用起來更加簡單。
例如,如果您希望更新行集合中的數據,但在使用嚮導創建使用者時卻忘記指定該功能,則可以在創建使用者之後通過對命令對象設置 DBPROP_IRowsetChange 和 DBPROP_UPDATABILITY 屬性來指定該功能。這樣,當行集合創建之後,它將具有 IRowsetChange 接口。
您是否有使用其他數據訪問技術(ADO、ODBC 或 DAO)的舊版代碼?
由於可能有各樣各樣的技術組合(例如 ADO 組件和 OLE DB 組件一起使用、將 ODBC 代碼遷移至 OLE DB 等等),所以 Visual C++ 文檔不能涵蓋所有的情形。

OLE DB區別關係

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 驅動程序之間的橋樑,理論上不會增加任何開銷。