一、對ADO對象的主要操作
對ADO對象的主要操作,同DAO、RDO庫的實現基本相同。主要包括6個方面:
1.連接到數據源。這是可選的、通常涉及ADO的Connection對象。
2.向數據源提交命令。通常涉及ADO的Command對象。在查詢中可以與參數對象(Parameter)協同使用。
3.執行命令,比如一個SELECT腳本。
4.如果提交的命令有結果返回,可以通過ADO的Recordset對象對結果進行操作,數據存儲在緩存中。
5.如果合適,可將緩存中被修改的數據更新到物理的存儲上。
6.提供錯誤檢測。通常涉及ADO的Error對象。
以程序員的視角來看,ADO、DAO和RDO三者的對象名稱不很相同。但使用ADO對象要比DAO和RDO簡單得多。最主要的一點在于,程序員不用像在使用DAO和RDO那樣要從對象模型的頂層開始一步步的創建子對象。因此,ADO提供了一種更靈活的編程方式。
二、ADO中主要對象的功能
Connection對象,表示了一個到數據源的會話。使用Connection對象的成員,可以使用相應的屬性打開到數據源的連接,設置游標的位置,設置默認的當前數據庫,設置將使用的OLEDBProvider,直接提交SQL腳本等。值得注意的是,在提交SQL腳本的任務時,不用創建一個Command對象,就可完成查詢。另外,對Connection對象的創建是同其他對象無關的。Command對象,可被用于查詢數據庫并返回結果在Recordset對象中。也可以進行批操作和操縱數據庫的結構,當然,這需要使用的OLEDBProvider提供相應的支持。此外,可以將一個激活的Connection對象綁定到Command對象的ActiveConnection屬性,這使得多個Command對象實例可以共用一個Connection對象。
Recordset對象,用來封裝查詢的結果,可稱為結果集。
Field對象,用來表達一行結果中各子段的類型和值。
Error對象,用來檢測和判斷在數據庫操作中出現的錯誤,比如連接失敗。 在ADO中,許多對象名后多了一個"s",比如Error->Errors,Field->Fields等等。添加"s"意味著是相應對象的Collection(集合)對象,比如Errors是Error對象的Collection對象。Collection有點像數組(Array),但不同的是,Collection可以以不同類型的數據或對象作為自己的元素,而數組中的各元素通常都是相同類型的。所以,在看到一個對象名最后是"s",通常表明這是一個Collection對象,比如Errors中的各元素是由Error對象的實例組成的。
三、簡單的例子
現在,我們在經過了前面的鋪墊后,終于可以進入寫代碼的過程了。下面是一系列在VisualBasic中編寫的代碼片段,其中對ADO的操縱完全用代碼來實現。在開始前,請不熟悉ActiveXAutomation的讀者牢記,我們正在使用的,是被實現為ActiveXAutomation的ADO組件。1.打開Connect.ion對象
打開一個到數據源的連接,即Connection對象的VB代碼如下:
Dim cn As ADODB.Connection ’聲明ADODB.Connection對象變量 Dim strCN As String ’聲明存放連接串的字符串變量 Set cn= New Connection ’實例化Connection對象 ’生成連接串(ConnectionString) strCN="Provider=Microsoft.Jet.Oledb.3.51; UserID=Admin;"&_ "DataSource=D:\MicrosoftVisual Studio\VB98\Nwind.mdb;" cn.Open strCN ’調用Connection對象的方法Open連接數據源 |
以上代碼在訪問ADO對象時,使用了前綁定(Early-bind),實現前綁定需要從VisualBasic的Project菜單下選擇Reference菜單項,并選擇MicrosoftActiveXDataObjects2.0Library。在程序中聲明的strCN變量中,連接串屬性Provider標識了OLEDBProvider為OLEDBProviderforMicrosoftJet,因為我們訪問的是MicrosoftAccess數據文件,使用MicrosoftJetEngine可以獲得比ODBC更好的性能。在試驗以上代碼時有兩個地方要注意。首先,要根據系統安裝的OLEDBProviderforMicrosoftJet服務選擇相應版本,可能是3.51,也可能是4.0。在本例中使用的是3.51版本。如果使用4.0版本,首先需要將Provider屬性改為"Microsoft.Jet.Oledb.4.0";其次,DataSource屬性標識了所要訪問的數據文件的路徑,要根據自己的安裝情況作出適當的調整。文件Nwind.mdb通常被VisualStudio默認安裝,一般放在Visual Basic的工作目錄下。
除了OLEDB Provider for MicrosoftJet以外,Visual Studio6.0還提供了以下的OLEDBProvider,如下所示。
OLEDB Provider類型 | 數據源類型 |
Microsoft OLEDB Provider for ODBC | databases |
Microsoft OLEDB Provider for Microsoft Index Server | Microsoft(r) Index Server |
Microsoft OLEDB Provider for Microsoft Active Directory Service | Microsoft(r) Active Directory Service |
Microsoft OLEDB Provider for SQLServer Microsoft(r) SQLServer | Microsoft OLEDB Provider for Oracle |
Oracle | databases |
這意味著使用ADO接口可以方便地訪問以上的各種數據源,要做的就是選擇適當的OLEDB Provider。除了使用Connection對象的Open方法以外,還可通過Recordset對象的Open方法快捷地創建到數據源的連接。這充分體現了ADO的靈活性。
2.創建Command對象
Dim cmd As ADODB.Command Set cmd=New Command’實例化Command對象 |
3.執行查詢
以Command對象為例。
Dim rs As New ADODB.Recordset Set cmd.ActiveConnection=cn’綁定激活的Connection對象實例 cmd.CommandText="SELECT*from Customers"’生成SQL腳本 Set rs=cmd.Execute’執行查詢 |
上述的代碼僅僅是一種查詢途徑,此外,ADO的Connection對象的Execute方法和Recordset對象的Open方法也提供了查詢能力。返回的結果可以被保存在一個Recordset對象實例中以便后續的數據處理和操縱。例如:
Dim rs As NewADODB.Recordset rs.Open cmd,cn,adOpenDymanic,adLockBatchOptimistic |
另外在SQL腳本的生成方式上,通?梢越柚鶳arameters/Parameter對象來完成。
4.顯示和操縱數據
查詢結果由Recordset對象封裝。對數據的操縱可以通過Recordset對象提供的成員(屬性和方法)來完成。
rs.MoveFirst Do While Not rs.EOF’判斷EOF標記屬性(Endoffile) Debug.Print rs!CustomerID & vbTab & rs!CompanyName & _ vbTab & rs!ContactName & vbTab & rs!ContactTitle rs.MoveNext’將游標指針移到下一條記錄 Loop |
上述代碼將Recordset中的各行記錄打印在Visual Basic的Immediate Window中。為了看到打印的結果,可以在上述代碼之后,增加一條Stop語句,以便進入Debug狀態。
5.更新記錄
使用Recordset對象來完成Update操作。
rs.Close’關閉之前建立的結果集
’打開新的結果集,具有寫操作權限
rs.Open"Customers",cn,adOpenDynamic,adLockOptimistic,adCmdTable rs.MoveFirst’雖無必要,但可能是一個良好的習慣 rs!CompanyName="Microsoft"’對相應字段賦予新值 rs.Update’在物理存儲上生效 |
除了Update以外,寫操作還包括AddNew(添加一條新記錄)和Delete(刪除一條新記錄)。另外,Recordset支持批處理,但這些特征需要由低層的OLEDBProvider支持。當寫操作出現錯誤時,可根據錯誤描述(訪問ADO的Error或VisualBasic的Err對象)來判斷原因。另一個需要注意的是,當使用Recordset對象完成寫操作時,需要預先指定Recordset對象實例非只讀。
6.收尾工作
在這個階段應該顯式的釋放相應的資源,如果不做的話,通常VisualBasic會自動釋放和回收資源。但對于一個有良好編程習慣的程序員來說,應該主動地做收尾工作,就像下面的代碼一樣。
rs.Close Set rs=Nothing Set cmd=Nothing cn.Close Set cn=Nothing |
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/
領測軟件測試網最新更新
關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
技術支持和業務聯系:info@testage.com.cn 電話:010-51297073
版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
技術支持和業務聯系:info@testage.com.cn 電話:010-51297073
老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月