ADO數據訪問模型初學者入門
ADO(ActiveXDataObjects)是Microsoft提供和建議使用的新型的數據訪問接口,具體實現為Automation。這樣, 程序員 可以在各種支持Automation的 開發 環境下方便地訪問ADO對象,如VisualBasic、VisualC++、VisualJ++及Delphi等。ADO被實現為OLEDB之上的一個
ADO(ActiveXDataObjects)是Microsoft提供和建議使用的新型的數據訪問接口,具體實現為Automation。這樣,
程序員可以在各種支持Automation的
開發環境下方便地訪問ADO對象,如VisualBasic、Visual
C++、VisualJ++及Delphi等。ADO被實現為OLEDB之上的一個薄層,這使得ADO可以有更快的訪問速度,更易使用,同時更節省資源。值得注意的是,對于VisualStudio6.0的用戶而言,現在提供的ADO2.0要比VisualStudio5.0時代的ADO1.5更加完整。這意味著程序員可以更為廣泛地使用ADO接口,甚至在所有的基于
Windows平臺的數據訪問中使用它。比如對RDS(前身是ADC)的支持,可以方便的構建高效的
Web應用。
一、對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代碼如下:
clearcase/" target="_blank" >cc66" width="90%" align="center" bgcolor="#e3e3e3" border="1">
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語句,以便進入De
bug狀態。
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.anti-gravitydesign.com
国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97
|