• <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>

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

            Blog @ Blog

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

            常用鏈接

            統(tǒng)計

            積分與排名

            BBS

            Blog

            Web

            最新評論

            ADO客戶數(shù)據(jù)庫編程

            ADO客戶數(shù)據(jù)庫編程

            ADO,即ActiveX Data Objects,是一種特殊OLE DB客戶程序,它允許訪問程序在Visual C++、Visual Basic、VBscriptJava等編程語言中訪問。雖然ADO的巨大優(yōu)勢在于Visual BasicVBscript的使用,但是在某些特殊的情況下,ADOVisual C++中的訪問是無法避免的。正是由于ADO本身是一種OLE DB客戶程序,所以在數(shù)據(jù)庫應(yīng)用程序里使用ADO變得更加容易。ADOOLE DB、數(shù)據(jù)庫應(yīng)用以及數(shù)據(jù)源之間的關(guān)系可以用圖9-1表示:

            9-1  ADOOLE DB、數(shù)據(jù)庫應(yīng)用以及數(shù)據(jù)源之間的關(guān)系

            本章詳細介紹ADO的基本原理和數(shù)據(jù)庫訪問技術(shù)。

            9.1  ADO原理

            9.1.1  ADOOLE DB

            ADO是微軟最新的對象層次上的數(shù)據(jù)操作技術(shù),它為操作OLE DB數(shù)據(jù)源提供了一套高層次自動化接口。盡管OLE DB 已經(jīng)是一個強大的數(shù)據(jù)操作接口,然而大多數(shù)數(shù)據(jù)庫應(yīng)用開發(fā)者并不需要OLE DB提供的操作數(shù)據(jù)的底層控制接口。大多數(shù)開發(fā)者對于管理內(nèi)存資源、手工聚合組件以及其它的底層操作接口并不是很感興趣。另外,開發(fā)者經(jīng)常使用高層的、不支持指針和C++函數(shù)調(diào)用規(guī)范的開發(fā)語言,OLE DB為這種需要提供了方便。

            從功能上來說,ADO也是一種OLE DB客戶程序,不過它不依賴于特定的OLE DB服務(wù)器,相反,它支持所有的OLE DB服務(wù)提供者。通過這些OLE DB服務(wù)提供者,ADO支持客戶/服務(wù)器模式和基于Web的數(shù)據(jù)庫應(yīng)用。

            ADO支持客戶/服務(wù)器模式基于Web的數(shù)據(jù)操作,ADO尤其支持通過客戶/服務(wù)器模式或者基于Web模式訪問微軟的SQL Server數(shù)據(jù)庫服務(wù)器。

            9.1.2  ADO的優(yōu)越性

            對于數(shù)據(jù)庫編程人員來說,ADO具有如下優(yōu)越性:

            ·       便于使用。

            ·       支持多種編程語言,包括Visual Basic、Java、C++、VBScriptJavaScript

            ·       支持任何的OLE DB服務(wù)器,ADO可以操作任何的OLE DB數(shù)據(jù)源。

            ·       不損失任何OLE DB的功能,ADO支持C++編程人員操作底層的OLE DB接口。

            ·       可擴展性,ADO能夠通過提供者屬性集合動態(tài)地表示指定的數(shù)據(jù)提供者,還能夠支持COM的擴展數(shù)據(jù)類型。

            9.1.3  ADO對象模型

            ADO對象模型包括以下關(guān)鍵對象:

            ·       Connection對象

            在數(shù)據(jù)庫應(yīng)用里操作數(shù)據(jù)源都必須通過該對象,這是數(shù)據(jù)交換的環(huán)境Connection對象代表了同數(shù)據(jù)源的一個會話,在客戶/服務(wù)器模型里,這個會話相當于同服務(wù)器的一次網(wǎng)絡(luò)連接。不同的數(shù)據(jù)提供者提供的該對象的集合、方法和屬性不同。

            借助于Connection對象的集合、方法和屬性,可以使用OpenClose方法建立釋放一個數(shù)據(jù)源連接。使用Execute方法可以執(zhí)行一個數(shù)據(jù)操作命令,使用BeginTrans、CommitTransRollbackTrans方法可以啟動、提交回滾一個處理事務(wù)。通過操作the Errors 集合可以獲取和處理錯誤信息,操作CommandTimeout屬性可以設(shè)置連接的溢出時間,操作ConnectionString屬性可以設(shè)置連接的字符串,操作Mode屬性可以設(shè)置連接的模式,操作Provider屬性可以指定OLE DB提供者。

            ·       Command對象

            Command對象是一個對數(shù)據(jù)源執(zhí)行命令的定義,使用該對象可以查詢數(shù)據(jù)庫并返回一個Recordset對象,可以執(zhí)行一個批量的數(shù)據(jù)操作,可以操作數(shù)據(jù)庫的結(jié)構(gòu)。不同的數(shù)據(jù)提供者提供的該對象的集合、方法和屬性不同。

            借助于Command對象的集合、方法和屬性,可以使用Parameters集合制定命令的參數(shù),可以使用Execute方法執(zhí)行一個查詢并將查詢結(jié)果返回到一個Recordset對象里,操作CommandText屬性可以為該對象指定一個命令的文本,操作CommandType屬性可以指定命令的類型,操作Prepared可以得知數(shù)據(jù)提供者是否準備好命令的執(zhí)行,操作CommandTimeout屬性可以設(shè)置命令執(zhí)行的溢出時間。

            ·       Parameter對象

            Parameter對象在Command對象中用于指定參數(shù)化查詢或者存儲過程的參數(shù)。大多數(shù)數(shù)據(jù)提供者支持參數(shù)化命令,這些命令往往是已經(jīng)定義好了的,只是在執(zhí)行過程中調(diào)整參數(shù)的內(nèi)容。

            借助于Parameter對象的集合、方法和屬性,可以通過設(shè)置Name屬性指定參數(shù)的名稱,通過設(shè)置Value屬性可以指定參數(shù)的值,通過設(shè)置AttributesDirection、Precision、NumericScaleSizeType 屬性可以指定參數(shù)的信息,通過執(zhí)行AppendChunk方法可以將數(shù)據(jù)傳遞到參數(shù)里。

            ·       Recordset對象

            如果執(zhí)行的命令是一個查詢并返回存放在表中的結(jié)果集,這些結(jié)果集將被保存在本地的存儲區(qū)里,Recordset對象是執(zhí)行這種存儲的ADO對象。通過Recordset對象可以操縱來自數(shù)據(jù)提供者的數(shù)據(jù),包括修改和更新行、插入和刪除行。

            ADO定義了如表9-1所示的光標類型。

            9-1  ADO的光標類型

            光標類型

            描述

            adOpenDynamic

            允許添加、修改和刪除記錄,支持所有方式的光標移動,其他用戶的修改可以在聯(lián)機以后仍然可見

            adOpenKeyset

            類似于adOpenDynamic光標,它支持所有類型的光標移動,但是建立連接以后其他用戶對記錄的添加不可見,其他用戶對記錄的刪除和對數(shù)據(jù)的修改是可見的。支持書簽操作

            adOpenStatic

            支持各種方式的光標移動,但是建立連接以后其他用戶的行添加、行刪除和數(shù)據(jù)修改都不可見,支持書簽操作

            adOpenForwardOnly

            只允許向前存取,而且在建立連接以后,其他用戶的行添加、行刪除和數(shù)據(jù)修改都不可見,支持書簽操作

            ADO定義了如表9-2所示的鎖定類型

            9-2  ADO的鎖定類型

            鎖定類型

            描述

            adLockReadOnly

            (缺省)數(shù)據(jù)只讀

            adLockPessimistic

            鎖定操作的所有行,也稱為消極鎖定

            adLockOptimistic

            只在調(diào)用Update方法時鎖定操作的行,也稱為積極鎖定

            adLockBatchOptimistic

            在批量更新時使用該鎖定,也稱為積極批量鎖定

            ADO定義了如表9-3所示的光標服務(wù)位置。

            9-3  ADO的鎖定類型

            光標服務(wù)位置

            描述

            adUseNone

            不使用光標服務(wù)位置

            adUseClient

            使用客戶端光標

            adUseServer

            (缺?。┦褂脭?shù)據(jù)服務(wù)端或者驅(qū)動提供端光標

            借助于Recordset對象的集合、方法和屬性,可以通過設(shè)置CursorType屬性設(shè)置記錄集的光標類型,通過設(shè)置CursorLocation屬性可以指定光標位置,通過讀取BOF EOF屬性的值,獲知當前光標在記錄集里的位置是在最前或者最后,通過執(zhí)行MoveFirst、MoveLast、MoveNextMovePrevious 方法移動記錄集里的光標,通過執(zhí)行Update方法可以更新數(shù)據(jù)修改,通過執(zhí)行AddNew方法可以執(zhí)行行插入操作,通過執(zhí)行Delete方法可以刪除行。

            ·       Field對象

            Recordset對象的一個行由一個或者多個Fields對象組成,如果把一個Recordset對象看成一個二維網(wǎng)格表,那么Fields對象就是這些列。這些列里保存了列的名稱、數(shù)據(jù)類型,這些值是來自數(shù)據(jù)源的真正數(shù)據(jù)。為了修改數(shù)據(jù)源里的數(shù)據(jù),必須首先修改Recordset對象各個行里Field對象里的值,最后Recordset對象將這些修改提交到數(shù)據(jù)源。

            借助于Field對象的集合、方法和屬性,可以通過讀取Name屬性,獲知列的名稱。通過操作Value屬性可以改變列的值,通過讀取Type、PrecisionNumericScale 屬性,可獲知列的數(shù)據(jù)類型、精度和小數(shù)位的個數(shù),通過執(zhí)行AppendChunk GetChunk 方法可以操作列的值。

            ·       Error對象

            Error對象包含了ADO數(shù)據(jù)操作時發(fā)生錯誤的詳細描述,ADO的任何對象都可以產(chǎn)生一個或者多個數(shù)據(jù)提供者錯誤,當錯誤發(fā)生時,這些錯誤對象被添加到Connection 對象的Errors集合里。當另外一個ADO對象產(chǎn)生一個錯誤時,Errors集合里的Error對象被清除,新的Error對象將被添加到Errors集合里。

            借助于Errosr對象的集合、方法和屬性,可以通過讀取NumberDescription屬性,獲得ADO錯誤號碼和對錯誤的描述,通過讀取Source屬性得知錯誤發(fā)生的源。

            ·       Property對象

            Property對象代表了一個由提供者定義的ADO對象的動態(tài)特征。ADO對象有兩種類型的Property對象:內(nèi)置的和動態(tài)的。內(nèi)置的Property對象是指那些在ADO里實現(xiàn)的在對象創(chuàng)建時立即可見的屬性,可以通過域作用符直接操作這些屬性。動態(tài)的Property對象是指由數(shù)據(jù)提供者定義的底層的屬性,這些屬性出現(xiàn)在ADO對象的Properties集合里,例如,如果一個Recordset 對象支持事務(wù)和更新,這些屬性將作為Property對象出現(xiàn)在Recordset對象的Properties集合里。動態(tài)屬性必須通過集合進行引用,比如使用下面的語法:

                    MyObject.Properties(0)   

            或者

                    MyObject.Properties("Name")

            不能刪除任何類型的屬性對象。借助于Property對象的集合、方法和屬性,可以通過讀取Name屬性獲得屬性的名稱,通過讀取Type屬性獲取屬性的數(shù)據(jù)類型,通過讀取Value屬性獲取屬性的值,

            ADO對象模型如圖9-2所示。

            9-2  ADO對象模型

            每個Connection,Command,RecordsetField對象都有一個Properties集合,如圖9-3所示。

            9-3  ADOProperties集合和Property對象
            9.1.4  ADO編程

            通常情況下,一個基于ADO的數(shù)據(jù)庫應(yīng)用使用如下過程操作數(shù)據(jù)源里的數(shù)據(jù):

            (1) 創(chuàng)建一個Connection 對象。定義用于連接的字符串信息,包括數(shù)據(jù)源名稱、用戶ID、口令、連接超時、缺省數(shù)據(jù)庫以及光標的位置。一個Connection 對象代表了同數(shù)據(jù)源的一次會話。可以通過Connection 對象控制事務(wù),即執(zhí)行BeginTransCommitTransRollbackTrans方法。

            (2) 打開數(shù)據(jù)源,建立同數(shù)據(jù)源的連接。

            (3) 執(zhí)行一個SQL命令。一旦連接成功,就可以運行查詢了??梢砸援惒椒绞竭\行查詢,也可以異步地處理查詢結(jié)果,ADO會通知提供者后臺提供數(shù)據(jù)。這樣可以讓應(yīng)用程序繼續(xù)處理其它事情而不必等待。

            (4) 使用結(jié)果集。完成了查詢以后,結(jié)果集就可以被應(yīng)用程序使用了。在不同的光標類型下,可以在客戶端或者服務(wù)器端瀏覽和修改行數(shù)據(jù)。

            (5) 終止連接。當完成了所有數(shù)據(jù)操作后,可以銷毀這個同數(shù)據(jù)源的連接。

            9.2  ADO的數(shù)據(jù)庫訪問規(guī)范

            Visual C++6.0ADO操作提供了庫支持,一般情況下,每個Windows操作系統(tǒng)的Program Files\Common Files\System\ado\目錄下都有一個msado*.dll文件,根據(jù)Windows版本的不同,該文件可以是msado1.dllmsado15.dllmsado2.dll。目前ADO的最高版本是2.0。在利用Visual C++6.0進行ADO編程時,可以借助Visual C++6.0import宏,將該庫文件引用到工程里,從而使msado*.dll庫里的數(shù)據(jù)和函數(shù)聲明被應(yīng)用的代碼所使用。

            通過引用,msado*.dll庫在工程里產(chǎn)生了所有ADO對象的描述和聲明,這些聲明同前面介紹的對象名稱基本相似,但有所不同,下面將最常用的操作對象介紹如下:

            ·       _ConnectionPtr:指向ADOConnect對象的指針。

            ·       _RecordsetPtr:指向ADORecordset對象的指針。

            ·       _CommandPtr:指向ADOCommand對象的指針。

            ·       _ParameterPtr:指向ADOParameter對象的指針。

            ·       FieldPtr:指向ADOField對象的指針。

            ·       ErrorPtr:指向ADOError對象的指針。

            ·       PropertyPtr:指向ADOProperty對象的指針。

            利用上述指針,可以使用9.1.3節(jié)里介紹的所有屬性和方法進行數(shù)據(jù)庫應(yīng)用開發(fā)。圖9-4是一個最典型的ADO對象使用流程描述。

            9-4  ADO的對象使用流程描述

             

            posted on 2008-11-27 17:25 isabc 閱讀(847) 評論(0)  編輯 收藏 引用 所屬分類: 數(shù)據(jù)庫

            廣告信息(免費廣告聯(lián)系)

            中文版MSDN:
            歡迎體驗

            99久久精品国产高清一区二区| 久久综合国产乱子伦精品免费| 色欲久久久天天天综合网| 亚洲欧美日韩精品久久| 久久久噜噜噜久久中文字幕色伊伊 | 国产精品久久一区二区三区| 伊人久久亚洲综合影院| 亚洲狠狠综合久久| 精品免费久久久久久久| 久久人人爽人人爽人人片av麻烦| 国产精品免费久久久久电影网| 亚洲中文字幕久久精品无码喷水 | 99久久精品日本一区二区免费| 久久久久久久久久久精品尤物| 伊人久久大香线焦综合四虎| 久久综合久久自在自线精品自| 日日狠狠久久偷偷色综合免费| 久久综合综合久久97色| 国产精品无码久久久久久| 亚洲精品乱码久久久久久按摩| 久久成人小视频| 欧美日韩精品久久久久| 久久久国产一区二区三区| 亚洲国产精久久久久久久| 久久99国产精品二区不卡| 麻豆亚洲AV永久无码精品久久| 国产69精品久久久久9999APGF| 亚洲综合久久夜AV | 一级a性色生活片久久无少妇一级婬片免费放 | 久久中文字幕人妻丝袜| 精品久久久久久无码不卡| 日本五月天婷久久网站| 狠狠色丁香久久婷婷综合_中 | 欧美久久久久久午夜精品| 人人狠狠综合88综合久久| 一级做a爰片久久毛片免费陪| 亚洲欧洲中文日韩久久AV乱码| 久久一区二区免费播放| 一级A毛片免费观看久久精品| 久久久精品国产免大香伊| 色婷婷综合久久久久中文一区二区 |