一、概述
ADO即Microsoft ActiveXData Object,是Microsoft繼ODBC之後,基於OLE DB技術的一種資料庫操作技術,使您能夠編寫通過 OLE DB提供者對在資料庫伺服器中的資料進行訪問和操作的應用程式。ADO同OLE DB、資料庫之間的關係可以用下圖來表示:
其主要優點是便於使用、高速度、低記憶體支出和佔用磁碟空間較少。ADO支援用於建立基於用戶端/伺服器和 Web的應用程式的主要功能。
二、ADO初步認識
在此介紹的ADO編程技術都是基於C++的,要熟練掌握如何用ADO操作資料庫,首先對ADO技術得有個總體的瞭解,AD0主要由幾個對象組成:Connection、Command、Paramenter、Recorderset、Fields、Error、Property對象,對資料庫的操作,都是通過這幾個對象來進行的,物件模型的關係圖如下:
· Connection對象
在資料庫應用裡操作資料源都必須通過該對象,這是資料交換的環境。Connection對象代表了同資料來源的一個會話,在客戶/伺服器模型裡,這個會話相當於同伺服器的一次網路連接。不同的資料提供者提供的該對象的集合、方法和屬性不同。
藉助於Connection對象的集合、方法和屬性,可以使用Open和Close方法建立和釋放一個資料來源串連。使用Execute方法可以執行一個資料操作命令,使用BeginTrans、CommitTrans和RollbackTrans方法可以啟動、提交和復原一個處理事務。通過操作the Errors 集合可以擷取和處理錯誤資訊,操作CommandTimeout屬性可以設定串連的溢出時間,操作ConnectionString屬性可以設定串連的字串,操作Mode屬性可以設定串連的模式,操作Provider屬性可以指定OLE DB提供者。
· Command對象
Command對象是一個對資料來源執行命令的定義,使用該對象可以查詢資料庫並返回一個Recordset對象,可以執行一個批量的資料操作,可以操作資料庫的結構。不同的資料提供者提供的該對象的集合、方法和屬性不同。
藉助於Command對象的集合、方法和屬性,可以使用Parameters集合制定命令的參數,可以使用Execute方法執行一個查詢並將查詢結果返回到一個Recordset對象裡,操作CommandText屬性可以為該對象指定一個命令的文本,操作CommandType屬性可以指定命令的類型,操作Prepared可以得知資料提供者是否準備好命令的執行,操作CommandTimeout屬性可以設定命令執行的溢出時間。
· Parameter對象
Parameter對象在Command對象中用於指定參數化查詢或者預存程序的參數。大多數資料提供者支援參數化命令,這些命令往往是已經定義好了的,只是在執行過程中調整參數的內容。
藉助於Parameter對象的集合、方法和屬性,可以通過設定Name屬性指定參數的名稱,通過設定Value屬性可以指定參數的值,通過設定Attributes和Direction、Precision、NumericScale、Size與Type屬性可以指定參數的資訊,通過執行AppendChunk方法可以將資料傳遞到參數裡。
· Recordset對象
如果執行的命令是一個查詢並返回存放在表中的結果集,這些結果集將被儲存在本地的儲存區裡,Recordset對象是執行這種儲存的ADO對象。通過Recordset對象可以操縱來自資料提供者的資料,包括修改和更新行、插入和刪除行。
ADO定義了如表
游標類型 |
描述 |
adOpenDynamic |
允許添加、修改和刪除記錄,支援所有方式的游標移動,其他使用者的修改可以在聯機以後仍然可見 |
adOpenKeyset |
類似於adOpenDynamic游標,它支援所有類型的游標移動,但是建立串連以後其他使用者對記錄的添加不可見,其他使用者對記錄的刪除和對資料的修改是可見的。支援書籤操作 |
adOpenStatic |
支援各種方式的游標移動,但是建立串連以後其他使用者的行添加、行刪除和資料修改都不可見,支援書籤操作 |
adOpenForwardOnly |
只允許向前存取,而且在建立串連以後,其他使用者的行添加、行刪除和資料修改都不可見,支援書籤操作 |
ADO定義了如表
鎖定類型 |
描述 |
adLockReadOnly |
(預設)資料唯讀 |
adLockPessimistic |
鎖定操作的所有行,也稱為消極鎖定 |
adLockOptimistic |
只在調用Update方法時鎖定操作的行,也稱為積極鎖定 |
adLockBatchOptimistic |
在批次更新時使用該鎖定,也稱為積極批量鎖定 |
ADO定義了如表
游標服務位置 |
描述 |
adUseNone |
不使用游標服務位置 |
adUseClient |
使用用戶端游標 |
adUseServer |
(預設)使用資料服務端或者驅動提供端游標 |
藉助於Recordset對象的集合、方法和屬性,可以通過設定CursorType屬性設定記錄集的游標類型,通過設定CursorLocation屬性可以指定游標位置,通過讀取BOF和EOF屬性的值,獲知當前游標在記錄集裡的位置是在最前或者最後,通過執行MoveFirst、