青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

山寨:不是最好的,是最適合我們的!歡迎體驗山寨 中文版MSDN

Blog @ Blog

當華美的葉片落盡,生命的脈絡才歷歷可見。 -- 聶魯達

常用鏈接

統計

積分與排名

BBS

Blog

Web

最新評論

OLE DB客戶數據庫編程

 

OLE DB是一種非常具有發展潛力的數據庫訪問技術,它首先基于COM技術,以COM規范為基礎建立數據庫訪問接口,成為介于數據庫應用和數據源之間的一種通用數據訪問標準;其次,OLE DB能夠訪問的數據源不再受到限制OLE DB通過OLE DB服務器將數據源透明化。從6.0版本開始,Visual C++提供了對OLE DB的全面支持。

8.1  OLE DB原理

8.1.1  OLE DBODBC

Visual C++之前的數據庫編程,通常都采用ODBC實現數據庫的訪問。ODBC是訪問數據庫的一個底層標準,數據庫供應商常常需要編寫ODBC驅動程序,以支持客戶對數據庫的訪問。雖然ODBC仍然是一個不斷發展的技術,但是ODBC在以下兩個方面無法達到目標:

ODBC只能訪問關系型數據源,而現在有許多數據源,包括E-MailWord文檔、文本、Internet連接與傳輸等等,是ODBC無法訪問的。

ODBC不能用于專門訪問特定的數據,因此使得ODBC不夠強大,為了追求標準,效率受到了嚴重影響。

OLE DB成功地解決了上述兩個問題。OLE DB為用戶提供了訪問不同類型的數據源的一種通用方法,它作為數據源和應用程序的中間層,允許應用程序以相同的接口訪問不同類型的數據源。OLE DB由一套通過COM訪問數據源的ActiveX接口組成,它提供一種訪問數據的統一手段,開發人員在開發時,不必考慮數據源的類型。

8.1.2  OLE DB的結構

OLE DB客戶(Consumer,也稱為應用程序)和服務器(Provider,又稱為提供者程序)組成??蛻羰侵溉魏我粋€使用了OLE DB接口的系統或者應用程序,其中包括OLE DB身,而服務器是指所有提供OLE DB接口的軟件組件

OLE DB客戶是使用數據的應用程序,它通過OLE DB接口對數據提供者的數據進行訪問控制。在大多數情況下,前端的數據庫應用開發都屬于客戶程序的開發。

OLE DB服務器是提供OLE DB接口的軟件組件,根據提供的內容可以將服務器分成數據提供程序服務器提供程序。數據提供程序擁有數據并將這些數據以表的形式存放,例如關系型DBMS、存儲管理器、電子表格和ISAM數據庫等。服務器提供程序不擁有數據,但是可以通過利用OLE DB接口建立一些提供服務的組件。從某種意義上來說,服務組件既是客戶又是服務器。

對于一個完整的數據庫應用程序來說,客戶和數據提供程序都是必不可少的。然而服務提供程序卻是可以省略的。當客戶需要對數據庫進行操作時,他并非直接對數據源發出指令,而是通過OLE接口與數據源進行交互,數據服務器從數據源取得所要查詢的數據時,以表格的形式將其提供給接口,再由客戶將數據從接口取出并使用。在這些操作中,客戶和數據服務器都不必知道對方的具體應用,而只需要對接口進行操作,從而簡化了程序設計。

8.1.3  OLE DB的優越性

OLE DB是一種基于COM的全新數據庫開發技術,它具有如下優點

廣泛的應用領域

以往的數據庫訪問技術,包括ODBC、DAO等,都只能訪問關系型數據庫,而OLE DB被設計成可以訪問任何格式的文件,其中當然包括關系型和非關系型的數據源,以及用戶自定義的文件格式,用戶只需要對所使用的數據源產生自己的數據提供程序,OLE DB客戶程序就可以透明地訪問到它們。

簡潔的開發過程

OLE DB的對象組件和接口已經定義了數據提供程序所需要的接口,Visual C++ 6.0也為此提供了OLE DB模板,可以很方便地產生一個OLE DB應用程序框架。OLE DB為建立服務提供程序提供了一系列功能,這些功能可以大大簡化數據提供程序的設計。由于數據使用程序并不需要知道當前數據提供程序的細節,因此它只需要使用OLE DB的接口即可完成程序設計。由于接口的標準性,數據使用程序可以被用到任何提供了數據提供程序的數據源,使得OLE DB程序具有良好的移植性。

可靠的穩定性

OLE DB應用程序是基于COM接口的應用程序,它繼承了COM接口的所有特性。COM模型具有良好的穩定性,COMCOM之間只要遵循規定的接口,可以很容易地進行通信,所有組件和接口共同工作,組成一個穩定的應用程序。OLE DB的各個對象都提供了錯誤對象和錯誤接口,可以由應用程序截獲錯誤,對其進行適當處理,從而提高了應用軟件的穩定性。

高效的數據訪問

作為一個組件數據庫管理系統,OLE DB通過將數據庫的功能劃分為客戶和服務器兩個方面,提供了比傳統數據庫更高的效率。由于數據使用者通常只需要數據庫管理的一部分功能,OLE DB將這些功能分離開來,減少了用戶方面的資源開銷,同時減少了服務器方面的負擔。

綜上所述,由于提供了靈活的接口和優越的性能,OLE DB必定成為數據庫開發的方向。

8.1.4  OLE DB對象

OLE DB的每一個組件都是一個COM對象,每一個組件都輸出一系列的接口。OLE DB由下列組件組成:

枚舉器

枚舉器用于搜尋可用的數據源和其它的枚舉器。如果客戶沒有指定所使用的枚舉器,則可以使用枚舉器來尋找,一般通過搜尋注冊表來發現相應的數據源。該對象包括如下接口:

        CoType TEnumerator{

                           [mandatory] IParseDisplayName;

                            [mandatory] ISourceRowset;

                            [mandatory] IDBInitialize;

                            [mandatory] IDBProperties;

                            [mandatory] ISupportErrorInfo;

        }

數據源對象

數據源對象包含與數據源(DBMS或者文件系統)連接的方法,此對象中含有環境變量、連接信息、用戶信息、用戶口令等信息。使用數據源對象可以產生會話。該對象包括如下接口:

         CoType TDataSource{

                           [mandatory] interface IDBCreateSession;

                            [mandatory] interface IDBInitialize;

                            [mandatory] interface IDBProperties;

                            [mandatory] interface IPersist;

                            [mandatory] interface IConnectionPointContainer;

                            [mandatory] interface IDBAsynchStatus;

                            [optional] interface IDBDataSourceAdmin;

                            [optional] interface IDBInfo;

                            [optional] interface IPersistFile;

                            [optional] interface ISupportErrorInfo;

        }

會話

會話為事務處理提供了上下文環境,它可以被顯式或者隱式地執行。一個數據源對象可以擁有多個會話,而通過會話又能夠生成事務命令行集。該對象的接口如下:

         CoType TSession{

                           [mandatory] interface IGetDataSource

                           [mandatory] interface IOpenRowset

                           [mandatory] interface ISessionProperties;

                            [optional] interface IDBCreateCommand;

                            [optional] interface IDBSchemaRowset;

                            [optional] interface IIndexDefinition;

                            [optional] interface ITableDefinition;

                            [optional] interface ITransactionJion;

                            [optional] interface ITransactionLocal;

                            [optional] interface ITransaction;

                            [optional] interface ITransactionObject;

                            [optional] interface ISupportErrorInfo;

        }

事務對象

事務對象用于管理數據庫的事務,將多個操作合并為一個單一的事務處理。該對象緩存了對數據源的改變,使應用程序有機會選擇提交或者回退以往的操作。事務能夠提高應用訪問數據庫的性能,但是OLE DB數據服務器并不要求支持該對象。該對象包括如下接口:

         CoType TTransaction{

                           [mandatory] interface IConnectionPointContainer;

                            [mandatory] interface ITransaction;

                            [optional] interface ISupportErrorInfo;

        }

命令對象

命令對象用于對數據源發送文本命令。對于支持SQL的數據源,SQL命令同命令對象一起執行,包括兩種數據定義語言和產生行集對象的查詢,對于其它不支持SQL的數據源,命令對象給數據源發送其它類型的文本命令。但是對于數據提供程序來說,不一定必須支持這個命令對象。一個單獨的會話能夠產生多個命令對象。該對象包括如下接口:

         CoType TCommand{

                           [mandatory] interface IAccessor;

                            [mandatory] interface IColumnsInfo;

                            [mandatory] interface ICommand;

                            [mandatory] interface ICommandProperties;

                            [mandatory] interface ICommandText;

                            [mandatory] interface IConvertType;

                            [optional] interface IColumnsRowset;

                            [optional] interface ICommandPrepare;

                            [optional] interface ICommandWithParameters;

                            [optional] interface ISupportErrorInfo;

        }

行集

行集以表的形式顯示數據,其中索引就是一種特殊的行集。行集可以從會話或者命令對象產生。如果數據提供程序不支持命令對象,則行集可以由數據提供程序直接產生,直接產生行集是每一個數據提供程序的基本功能。根據數據提供程序所提供的功能,行集對象可以完成更新、插入、刪除等操作。該對象包括如下接口:

         CoType TRowset{

                           [mandatory] interface IAccessor;

                            [mandatory] interface IColumnsInfo;

                            [mandatory] interface IConvertType;

                            [mandatory] interface IRowset;

                            [mandatory] interface IRowsetInfo;

                            [mandatory] interface IChapteredRowset;

                            [optional] interface IColumnsRowset;

                            [optional] interface IConnectionPointContainer;

                            [optional] interface IDBAsynchStatus;

                            [optional] interface IRowsetChange;

                            [optional] interface IRowsetFind;

                            [optional] interface IRowsetIdentity;

                            [optional] interface IRowsetIndex;

                            [optional] interface IRowsetLocate;

                            [optional] interface IRowsetRefresh;

                            [optional] interface IRowsetScroll;

                            [optional] interface IRowsetUpdate;

                            [optional] interface IRowsetView;

                            [optional] interface ISupportErrorInfo;

        }

錯誤對象

錯誤對象中封裝了訪問數據提供程序時發生的錯誤,它可以由任何OLE DB對象的任何接口產生。錯誤對象中含有關于錯誤的附加信息,包括一個可選的定制錯誤對象,通過它也能夠獲得擴展的返回碼和狀態信息。該對象包括如下接口:

         CoType TError{

                           [mandatory] interface IErrorRecords;

         }

如果用戶不能確定數據源的位置,可以先使用枚舉器尋找數據源,在找到數據源以后,就可以使用它來生成一個會話,這個會話允許用戶對數據進行訪問,或者以行集的形式,或者以命令的形式。


8-1展示了OLE DB應用程序的對象流程。

8-1  OLE DB應用程序對象流程


8-2  OLE DB的客戶模板體系結構

8.1.5  OLE DB客戶模板結構

OLE DB客戶模板支持OLE DB1.1版本的標準,它使實現一個0OLE DB代碼質量、客戶所需要標寫的代碼量達到最少。該模板具有如下優點:

易于使用OLE DB所提供的功能。

易于與ATLMFC集成。

提供了數據參數綁定和列綁定的簡單模型。

在編程時能夠使用C/C++數據類型。

OLE DB的客戶模板體系結構如圖8-2所示。

由圖可以看出,OLE DB的客戶模板體系結構由數據源支持類、用戶記錄類、行集和綁定類以及表和命令支持類4部分構成。

8.1.6  OLE DB客戶模板類

為了能更好的使用OLE DB客戶模板進行應用程序設計,首先必須熟悉OLE DB的客戶模板類。根據功能,OLE DB客戶模板類分成7會話類、存取器類行集類命令類屬性類、書簽類以及錯誤類。

會話類

會話類包括CDataSource類、CEnmmerator類、CSession類和CEnmmeratorAccessor類。

1. CDataSource

CDataSource類對應于OLE DB數據源對象,代表服務器與數據源的連接。在單個連接上可以擁有多個數據庫會話,其中的每一個會話都由CSession對象表示。調用CDataSource類的Open方法可以建立同數據源的連接。

2. CEnmmerator

CEnmmerator類對應于OLE DB枚舉器對象,能夠檢索可用的數據源和枚舉器信息。CEnmmerator通過ISourcesRowset接口來獲得包含所有數據源和枚舉器描述的行集,用戶可以直接通過該類得到ISourcesRowset數據。

3. CSession

CSession類對應于OLE DB會話對象,代表單個數據庫訪問會話。要從CDataSource對象創建一個新的CSession對象,需要首先調用CDataSource對象的Open方法建立同數據源的連接,創建CSession對象的方法也是調用CSession對象的Open方法。該類還提供了事務處理函數,用戶調用StartTransaction函數開始一個事務處理操作,調用Commit或者Abort函數提交或者回退這個事務處理。

4. CEnmmeratorAccessor

CEnmmeratorAccessor類被CEnmmerator類用來訪問來自枚舉器行集的數據,這個行既包括從當前枚舉器中可見的數據源和枚舉器。

存取器類

存取器類包括CAccessorBase類、CAccessor類、CDynamicAccessor類、CDynamicParameterAccessor類和CManualAccessor類。

1. CAccessorBase

CAccessorBase類是所有存取器類的基類,所有存取器的OLE DB模板都是從該類中派生出來的。CAccessorBase類允許一個行集管理多個存取器,它還提供了對參數和輸出的綁定。

2. CAccessor

CAccessor類用于靜態綁定到數據源的記錄,使用該存取器類時,必須事先知道數據源的結構。當一個記錄被靜態綁定到數據源時,該記錄包含一個緩沖區。該類支持單個行集上的多個存取器。當知道數據源的結構時可以使用該存取器。

3. CDynamicAccessor

CDynamicAccessor類所代表的存取器可以在運行時被創建,它基于行集的列信息。當不知道數據源的結構時,可以使用CDynamicAccessor類檢索數據。該類將創建并管理緩沖區,使用GetValue方法從緩沖區里讀取數據。

4. CDynamicParameterAccessor

在不知道命令類型時,可以使用CDynamicParameterAccessor類進行數據存取。如果服務器支持ICommandWithParameters接口,則該類就通過調用這個接口讀取參數信息。該類與CDynamicAccessor類類似,但是它所獲得的是參數信息。該類也能夠創建并管理緩沖區,通過調用GetParamGetParamType方法可以從緩沖區里讀取列的信息。

5. CManualAccessor

CManualAccessor具有同時處理列和命令的能力,利用這個類,能夠使用服務器可轉換的數據類型。該類代表了為將來設計而使用的存取器類型,使用該類能夠通過運行時函數調用指定參數和輸出列。

行集類

行集類包括CRowset類、CBulkRowset類、CAccessorRowset類、CArrayRowset類和CRestrictions類。

1. CRowset

CRowset類用于處理建立檢索行數據。在OLE DB中,行集為應用程序操作數據所用的對象。CRowset類封裝了OLE DB行集對象和一些相關的接口,并為操作行集數據提供了成員函數。

2. CBulkRowset

CBulkRowset類用于批量讀取和處理行,通過單個函數調用可檢索多個行句柄。

3. CAccessorRowset

CAccessorRowset封裝一個行集和相關的存取器。

4. CArrayRowset

CArrayRowset類用于以數組形式訪問行集中的元素。

5. CRestrictions

CRestrictions類用于為綱要行集指定限制條件。

命令類

命令類包括:CCommand類、CTable類、CMultipleResults類、CNoMultipleResults類、CNoAccessor類和CNoRowset類。

1. CCommand

CCommand類用于設置和執行一個基于參數的OLE DB命令,如果只需要打開一個簡單的行集,則應該使用CTable類。

2. CTable

CTable類用于訪問一個不帶參數的簡單行集。

3. CMultipleResults

CMultipleResults類用于將CCommand類的TMultiple參數設置TRUE

4. CNoMultipleResults

CMultipleResults類用于將CCommand類的TMultiple參數設置FALSE。

5. CNoAccessor

CNoAccessor類用于將CCommand類的TAccessor參數設置FALSE。

6. CNoRowset

CNoAccessor類用于將CCommand類的TRowset參數設置FALSE

屬性類

屬性類包括:CDBPropIDSet類和CDBPropSet類。

1. CDBPropIDSet

CDBPropIDSet類用于傳遞一個包含客戶請求的屬性信息的屬性ID數組。

OLE DB客戶用DBPROPIDSET結構來傳遞一組客戶要得到的屬性信息的屬性標識。在DBPROPIDSET結構中被標識的屬性屬于一個屬性集合。CDBPropIDSet類繼承了DBPROPIDSET結構并添加了一個構造函數,用于初始化關鍵字段和AddPropertyID方法。

2. CDBPropSet

CDBPropSet類用于設置服務器屬性。

OLE DB服務器和客戶用DBPROPSET結構來傳遞DBPROP結構數組。每一個DBPROP結構代表了可以被設置的單個屬性。CDBPropSet類繼承了DBPROP結構并添加了一個構造函數,用于初始化關鍵字段數據成員和AddProperty方法。

書簽類

OLE DB里客戶模板的書簽類是指CBookMark類,它被用于以索引的形式在行集中訪問數據

錯誤類

OLE DB里客戶模板的錯誤類是指CDBErrorInfo類,它用于檢索OLE DB的出錯信息。這個類提供了使用OLE DBIErrorRecords接口進行OLE DB出錯處理的支持。這個接口向用戶返回一個或者多個錯誤記錄。調用GetErrorRecords方法可以得到一個出錯記錄數,然后調用GetAllErrorInfo方法檢索每一條出錯記錄的信息。

posted on 2008-11-27 16:34 isabc 閱讀(1589) 評論(0)  編輯 收藏 引用 所屬分類: 數據庫

廣告信息(免費廣告聯系)

中文版MSDN:
歡迎體驗

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久国产日本精品| 欧美一区=区| 欧美日本国产视频| 这里只有视频精品| 欧美一区二区三区在线免费观看| 国产精品欧美日韩久久| 午夜久久福利| 欧美成人自拍| 亚洲一区二区三区在线视频| 国产精品一区二区三区久久| 久久久福利视频| 亚洲精品视频在线观看网站| 欧美一区激情| 亚洲电影在线看| 欧美日韩综合精品| 久久精品99国产精品日本| 亚洲电影免费观看高清| 亚洲一区欧美二区| 伊人狠狠色j香婷婷综合| 欧美精品久久99久久在免费线| 这里只有精品丝袜| 嫩模写真一区二区三区三州| 宅男噜噜噜66一区二区66| 国产亚洲欧美另类中文| 欧美激情一区二区三区四区| 亚洲欧美中文在线视频| 亚洲激情视频网| 久久久久国产精品一区二区| 日韩系列在线| 韩国精品一区二区三区| 欧美日本精品一区二区三区| 久久av一区二区三区漫画| 日韩一区二区福利| 蜜臀91精品一区二区三区| 亚洲一区二区欧美| 亚洲国产精品一区制服丝袜 | 麻豆91精品91久久久的内涵| 日韩一级在线观看| 欧美a级片一区| 欧美在线精品一区| 亚洲神马久久| 亚洲欧洲综合另类| 黄色av日韩| 国产伦精品一区二区| 欧美美女日韩| 欧美成人午夜影院| 久久免费国产| 久久99伊人| 香港久久久电影| 亚洲视频大全| 日韩一级精品视频在线观看| 欧美激情按摩在线| 麻豆久久精品| 久久综合久久久| 亚欧美中日韩视频| 亚洲在线一区| 在线视频精品一区| 日韩一区二区精品视频| 亚洲激情影视| 亚洲第一毛片| 亚洲成在线观看| 在线观看日韩www视频免费| 国产综合欧美在线看| 国产日韩欧美在线看| 国产精品亚洲综合色区韩国| 国产精品盗摄久久久| 欧美日韩亚洲综合在线| 欧美区高清在线| 欧美日韩精品久久久| 欧美日本国产精品| 欧美日韩亚洲一区三区| 欧美日韩视频一区二区三区| 欧美日韩在线免费视频| 欧美日韩精品一区二区在线播放| 欧美日韩国产精品专区| 欧美日韩一二三四五区| 国产精品久久福利| 国产乱码精品一区二区三| 国产欧美韩国高清| 国内外成人在线视频| 在线精品国精品国产尤物884a| 樱桃国产成人精品视频| 亚洲国产精品一区二区www| 亚洲国产日韩美| 99精品久久久| 亚洲一区久久久| 久久成人综合网| 欧美jjzz| 亚洲剧情一区二区| 亚洲午夜高清视频| 欧美在线观看视频在线| 久久综合久久综合这里只有精品| 欧美成年人视频| 欧美午夜视频在线| 国产一区在线看| 亚洲伦理网站| 午夜精品视频在线观看| 老**午夜毛片一区二区三区| 欧美激情一区二区三区全黄| 日韩亚洲精品在线| 欧美一区二区三区在线播放| 女人色偷偷aa久久天堂| 欧美无砖砖区免费| 国产亚洲欧美在线| 亚洲精品在线一区二区| 羞羞色国产精品| 欧美激情免费在线| 一区二区三区欧美日韩| 久久精品九九| 欧美日韩在线看| 伊人春色精品| 亚洲免费在线精品一区| 欧美成人a∨高清免费观看| a4yy欧美一区二区三区| 久久精品一区二区三区不卡牛牛 | 欧美色精品天天在线观看视频| 国产区精品视频| 亚洲人成亚洲人成在线观看图片 | 国产精品久久久久久久电影| 国产有码在线一区二区视频| 亚洲乱亚洲高清| 久久免费高清| 在线亚洲观看| 欧美大片免费久久精品三p| 国产欧美综合在线| 一区二区三区免费看| 美女国产一区| 亚洲综合首页| 欧美女主播在线| 亚洲福利视频一区| 久久精品人人做人人综合| 夜夜嗨av一区二区三区网站四季av| 久久久久成人网| 国产欧美日韩视频| 亚洲一区二区三区777| 亚洲大片免费看| 久久精品99国产精品日本| 国产精品另类一区| 亚洲裸体在线观看| 欧美不卡视频一区| 久久精品成人一区二区三区蜜臀| 国产精品久久久久久妇女6080| 亚洲日本无吗高清不卡| 久久在线视频| 欧美一区二区三区在线观看 | 欧美成人在线影院| 欧美一区二区福利在线| 国产精品国色综合久久| 一区二区三区高清不卡| 亚洲电影毛片| 欧美成人免费大片| 亚洲人午夜精品免费| 欧美国产在线视频| 老司机aⅴ在线精品导航| 在线电影国产精品| 免费久久久一本精品久久区| 久久精品av麻豆的观看方式| 国产亚洲精品美女| 久久久国产精品一区| 欧美一区二区三区四区在线观看地址 | 国产乱码精品一区二区三区av| 亚洲精品视频二区| 欧美激情偷拍| 免费欧美日韩国产三级电影| 在线观看91精品国产入口| 美女免费视频一区| 毛片基地黄久久久久久天堂| 亚洲第一在线综合在线| 欧美国产一区二区| 欧美精品一区在线发布| 亚洲小少妇裸体bbw| 中文在线资源观看网站视频免费不卡 | 激情综合久久| 欧美成人午夜激情视频| 欧美gay视频激情| 亚洲精品在线免费观看视频| 亚洲人成网站在线播| 欧美日本高清| 亚洲欧美一级二级三级| 先锋a资源在线看亚洲| 怡红院精品视频| 亚洲国产精品传媒在线观看| 欧美日韩精品一本二本三本| 午夜精品一区二区三区四区 | 久热爱精品视频线路一| 91久久综合亚洲鲁鲁五月天| 亚洲精品久久视频| 国产老女人精品毛片久久| 美国三级日本三级久久99| 欧美国产日韩在线| 亚洲欧美日本国产有色| 久久精品国产91精品亚洲| 亚洲日本aⅴ片在线观看香蕉| 一本色道久久综合亚洲精品不卡| 国产日韩精品一区二区三区在线| 欧美成年视频| 国产精品久久久久999| 久久伊伊香蕉| 欧美色欧美亚洲高清在线视频| 久久精品亚洲|