ADO資料訪問模型初學者入門

來源:互聯網
上載者:User
ado|初學|訪問|資料   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代碼如下:

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指令碼的產生方式上,通常可以藉助Parameters/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



相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。