ADO.NET深入研究(1)[精選]

來源:互聯網
上載者:User
ado 導 讀:.NET 在資料存取方面做了很大的調整。在.NET 架構下,資料存取是由ADO.NET來完成的,這是一個ADO的改進和完善版本。它最顯著的變化是其完全基於XML。而對於從事ADO開發的人員來說,Recordset對象的消失也令他們感到驚奇。

--------------------------------------------------------------------------------

翻譯整理:.net技術網(www.51dotnet.com)slash
原文出處:http://www.dnjonline.com/articles/essentials/iss22_essentials.html

.NET 在資料存取方面做了很大的調整。在.NET 架構下,資料存取是由ADO.NET來完成的,這是一個ADO的改進和完善版本。它最顯著的變化是其完全基於XML。而對於從事ADO開發的人員來說,Recordset對象的消失也令他們感到驚奇。

微軟對Recordset 對象的看法是:它相對於最初的為了產生一個SQL查詢的結果的機制,顯得有些過於臃腫了。因此,在ADO.NET中,Recordset對象的功能將被拆分到三個部分中去。首先是DataReader對象, 它所要完成的功能是將資料簡單的表現出來;在ADO中,類似功能是由向前的、伺服器端的游標(forward-only, server-side cursor)來實現的。然後是DataSet 和 DataSetCommand 對象,它們能夠在用戶端建立一個或一個以上的資料集合的緩衝,並對它們進行操作。在ADO中,用戶端游標的使用相對比較單一化,而在這方面ADO.NET則分別賦予這兩個對象不同的功能,從而使它們具有更加專一而強大的功能。最後,是其他一些在ADO中能夠實現的功能,比如說,利用Connection對象在保守鎖定的情況下進行資料的更新。這是在ADO.NET中無法實現的功能,這意味著在某些時候,ADO將被繼續使用。

在進入DataSet的討論之前,我們先來簡單的來看一看ADO.NET。

使用DataReader

ADO.NET提供了三個類:DBConnection, DBCommand 和 DBDataReader,它們與傳統的ADO對象十分的相似。但是在.NET應用程式中它們不能被直接使用。能夠使用的是從它們繼承而來的類,比如ADOConnection, ADOCommand 和 ADODataReader來讀取資料,這裡的前提是存在一個OLEDB的Provider。如果要操作的對象是SQL Server,那麼將使用另一些功能相同的類SQLConnection, SQLCommand 和 SQLDataReader 以便直接通過SQL Server 的 TDS 串連通道來獲得更好的工作效能。下面是一個例子(因為在這裡C#和VB.NET的代碼區別不是很大,所以將只使用VB.NET的執行個體):

Imports System.Data
Imports System.Data.ADO
..
Dim cn As New ADOConnection()
cn.ConnectionString = strConnect

Try
cn.Open()
Dim cd As New ADOCommand(搒elect * from authors? cn)
Dim dr As ADODataReader
cd.Execute(dr)
While dr.Read()
listbox1.Items.Add(dr(揳u_lname?)
End While
Catch err As Exception
MsgBox(err.ToString)
Finally
If cn.State = DBObjectState.Open Then cn.Close()
End Try
在上面你會發現在While Loop語句中沒有出現MoveNext方法,因為DataReader的Read方法將自動前移游標,並會在沒有資料的時候返回一個False值。這顯然減輕了開發人員的工作量。

在兩種情況下,DataReader被推薦使用:一、客戶介面利用手寫代碼,或是沒有用到資料繫結並且資料的更新是利用手寫的SQL語句或是預存程序,這種情況下,DataReader將提供有效訪問相關資料的方法;二、一個需要查看資料庫狀態的的過程,但不需要實現諸如自動更新的功能。一些比較好的應用執行個體有向下拉式功能表填充資料,以及產品編號的驗證。

理解DataSets

對於一些開發人員來說,可能會對DataSets的使用頗有微詞,但事實上,掌握它並不難。如果你對串連斷開的RecordSet 模式,以及分層的RecordSet 的使用不陌生,並且樂於使用一些XML的話,那麼利用DataSets 就沒有什麼困難了。

可是有什麼必要去花費時間去重新學習一種物件模型呢?
理由之一是,ADO.NET 力推的中斷連線模式(disconnected model)是非常有意義的。中斷連線的資料伸縮性更高,因為這種模式對資料服務器的壓力比較小。通過平行伺服器對中介層進行擴充比對資料層進行擴充要容易的多,因此對於可擴充的應用程式來說,對資料層資源的使用要謹慎。中斷連線模式將在這裡得到應用。
理由二,在資料管理方面,中斷連線模式有非常廣闊的前景。

如果說有一種技術的 發展比ADO還要迅速,這就是XML。XML解決了兩個ADO所對的局限。
1、XML更加適用與跨平台的的資料轉送,因為它能夠穿越防火牆。
2、XML比ADO包括它的擴充ADO2.5描述的類型多。一個簡單的例子,同樣面對扁平的資料,普通的XML將比ADO顯示出更高的效率。

DataSets是XML與ADO結合的產物,它的一個重要的特點是與資料庫或SQL無關。它只是簡單的對資料表進行操作,交換資料或是將資料繫結到使用者介面上。

向DataSets中加入資料表的方法有兩種:
1、利用DataSetCommand對象,它可以以XML 的形式返回一個資料庫查詢的結果。在處理資料庫更新的時候,這種方法與ADO的用戶端游標基本相同,但提供更強的控制。
2、直接對XML資料進行操作。DataSet 對象有對XML資料和Schemas進行讀寫的的方法,並且可以和XMLDataDocument對象(該對象是多用途XMLDocument類的繼承)緊密的結合起來工作,它具有一些對扁平資料操作的特殊函數因此可以作為從DataSet 到通用XML DOM的橋樑。

下面是一段使用DataSet的代碼:
Dim dc As New ADODataSetCommand( _
"select au_id, au_fname, au_lname from authors" & _
" where au_lname = ‘Ringer’", strConnect)
Dim ds As New DataSet()

dc.FillDataSet(ds, "Authors")
MsgBox(ds.XmlSchema, , "XML Schema")
MsgBox(ds.XmlData, , "XML Data")

以上的代碼將一個‘AUTHORS’資料表填充到DataSet 對象執行個體 ds 中,並顯示了XML資料和Schemas,請看兩個顯示結果:表1 和 表2

向DataSet中添加資料表的操作是非常容易的,請看下面的代碼:

dc = New ADODataSetCommand( _
"select * from titleauthor" & _
" where title_id like 'PS%'", strConnect)

dc.FillDataSet(ds, "Titles")
MsgBox(ds.XmlData, , "XML Data")




表1顯示XML Schema




表2顯示DataSet 對象產生的資料




未 完 待 續


相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

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 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。