ADO數據訪問模型初學者入門

發表于:2007-05-25來源:作者:點擊數: 標簽:模型初學者ado訪問入門
ADO(ActiveXDataObjects)是Microsoft提供和建議使用的新型的數據訪問接口,具體實現為Automation。這樣, 程序員 可以在各種支持Automation的 開發 環境下方便地訪問ADO對象,如VisualBasic、VisualC++、VisualJ++及Delphi等。ADO被實現為OLEDB之上的一個
  ADO(ActiveXDataObjects)是Microsoft提供和建議使用的新型的數據訪問接口,具體實現為Automation。這樣,程序員可以在各種支持Automation的開發環境下方便地訪問ADO對象,如VisualBasic、VisualC++、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語句,以便進入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.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97