ADO.NET

ADO.NET

ADO.NET的名稱起源於ADO(ActiveX Data Objects),是一個COM組件庫,用於在以往的Microsoft技術中訪問數據。之所以使用ADO.NET名稱,是因為Microsoft希望表明,這是在NET編程環境中優先使用的數據訪問接口。

基本信息

簡介

ado.net可讓開發人員以一致的方式存取資料來源(例如SQL Server與XML),以及透過OLE DB和ODBC所公開的資料來源。資料共用的消費者應用程式可使用ado.net來連線至這些資料來源,並且擷取、處理及更新其中所含的資料。

ado.net可將資料管理的資料存取分成不連續的元件,這些元件可分開使用,也可串聯使用ado.net也包含.NET Framework資料提供者,以用於連線資料庫、執行命令和擷取結果。這些結果會直接處理、放入ado.net DataSet物件中以便利用機器操作(Ad Hoc)的方式公開給使用者、與多個來源的資料結合,或在各層之間進行傳遞。DataSet物件也可以與.NET Framework資料提供者分開使用,以便管理應用程式本機的資料或來自XML的資料。

ado.net類別(Class)位於System.Data.dll中,而且會與System.Xml.dll中的XML類別整合。

ado.net可為撰寫Managed程式碼的開發人員提供類似於ActiveX Data Objects(ADO)提供給原生元件物件模型(Component Object Model,COM)開發人員的功能。建議使用ado.net而非ADO來存取.NET 應用程式中的資料。

ADO.NET會提供最直接的方法,讓開發人員在.NET Framework中進行資料存取。

隱私權聲明:

System.Data.dll、System.Data.Design.dll、System.Data.OracleClient.dll、System.Data.SqlXml.dll、System.Data.Linq.dll、System.Data.SqlServerCe.dll 和 System.Data.DataSetExtensions.dll組件無法區分使用者的私用資料與非私用資料。這些組件不會收集、儲存或傳輸任何使用者的私用資料。不過,協力廠商應用程式可能會使用這些組件來收集、存儲或傳輸使用者的私用資料。

發展

1998年起,因為Web應用程式的竄起,大大改變了許多應用程式的設計方式,傳統的資料庫連線保存設計法無法適用於此類應用程式,這讓ADO應用程式遇到了很大的瓶頸,也讓微軟開始思考讓資料集(Resultset,在ADO中稱為Recordset)能夠離線化的能力,以及能在用戶端創建一個小型資料庫的概念,這個概念就是ado.net中離線型資料模型(disconnected data model)的基礎,而在ADO的使用情形來看,資料庫連線以及資源耗用的情形較嚴重(像是Server-side cursor或是Recordset.Open會保持連線狀態),在ado.net中也改良了這些物件,構成了能夠減少資料庫連線和資源使用量的功能。XML的使用也是這個版本的重要發展之一。2000年,微軟的Microsoft.NET計畫開始成形,許多的微軟產品都冠上.NET的標籤,ADO+也不例外,改名為ado.net並包裝到.NET Framework類別庫中,成為.NET平台中唯一的資料存取元件。

架構

傳統的資料處理主要是依賴相互連線的雙層式模型。隨著資料處理朝多層次架構發展,程式設計人員也逐漸改用中斷連線的方式,使應用程式更具延展性(Scalability)。

ADO.NET3.0中用於存取和管理資料的兩個主要元件是.NET Framework資料提供者和DataSet。

資料提供者

.NET Framework 資料提供者是一種明確設計用於管理資料以及快速存取順向唯讀資料的元件。Connection物件會提供資料來源的連線。Command物件可讓開發人員存取資料庫命令,以便傳回資料、修改資料、執行預存程式(Stored Procedure),並且傳送或擷取參數資訊。DataReader則可提供來自資料來源的高效能資料流。最後,DataAdapter會提供DataSet物件與資料來源之間的橋接器(Bridge)。DataAdapter會使用Command物件與資料來源處執行SQL命令,以便將資料載入DataSet,並且將DataSet內的資料變更調節回資料來源。

DataSet

ADO.NET 架構ADO.NET 架構

ado.net DataSet的設計已明確指出它可獨立於任何資料來源外而存取資料。因此,它可與多個不同的資料里來源搭配使用、與XML資料搭配使用,或用於管理應用程式的本機資料。DataSet包含一或多個由資料列和資料行所組成的 DataTable物件集合,以及DataTable物件中的主索引鍵、外部索引鍵、條件約束(Constraint)及資料的相關資訊。

右圖說明.NET Framework資料提供者與DataSet之間的關聯性。

作用

它提供了平台互用性和可伸縮的數據訪問,ADO.NET增強了對非連線編程模式的支持,並支持RICH XML。由於傳送的數據都是XML格式的,因此任何能夠讀取XML格式的應用程式都可以進行數據處理。事實上,接受數據的組件不一定要是ADO.NET組件,它可以是基於一個Microsoft Visual Studio的解決方案,也可以是任何運行在其它平台上的任何應用程式。

ado.net是一組用於和數據源進行互動的面向對象類庫。通常情況下,數據源是資料庫,但它同樣也能夠是文本檔案、Excel表格或者XML檔案。

ado.net允許和不同類型的數據源以及資料庫進行互動。然而並沒有與此相關的一系列類來完成這樣的工作。因為不同的數據源採用不同的協定,所以對於不同的數據源必須採用相應的協定。一些老式的數據源使用ODBC協定,許多新的數據源使用OleDb協定,並且現在還不斷出現更多的數據源,這些數據源都可以通過NET的ADO.NET類庫來進行連線。

ado.net提供與數據源進行互動的相關的公共方法,但是對於不同的數據源採用一組不同的類庫。這些類庫稱為Data Providers,並且通常是以與之互動的協定和數據源的類型來命名的。

ado.net是與數據源互動的.NET技術。有許多的Data Providers,它將允許與不同的數據源交流――取決於它們所使用的協定或者資料庫。然而無論使用什麼樣的Data Provider,開發人員將使用相似的對象與數據源進行互動。SqlConnection對象管理與數據源的連線。SqlCommand對象允許開發人員與數據源交流並傳送命令給它。為了對進行快速的只“向前”地讀取數據,使用SqlDataReader。如果想使用斷開數據,使用DataSet並實現能進行讀取或者寫入數據源的SqlDataAdapter。

類庫

Connection類

和資料庫互動,必須連線它。連線幫助指明資料庫伺服器、資料庫名字、用戶名、密碼,和連線資料庫所需要的其它參數。Connection對象會被Command對象使用,這樣就能夠知道是在哪個數據源上面執行命令。

與資料庫互動的過程意味著必須指明想要執行的操作。這是依靠Command對象執行的。開發人員使用Command對象來傳送SQL語句給資料庫。Command對象使用Connection對象來指出與哪個數據源進行連線。開發人員能夠單獨使用Command對象來直接執行命令,或者將一個Command對象的引用傳遞給DataAdapter,它保存了一組能夠操作下面描述的一組數據的命令。

Command對象

成功與數據建立連線後,就可以用Command對象來執行查詢、修改、插入、刪除等命令;Command對象常用的方法有ExecuteReader()方法、ExecuteScalar()方法和ExecuteNonQuery()方法;插入數據可用ExecuteNonQuery()方法來執行插入命令。

DataReader類

許多數據操作要求開發人員只是讀取一串數據。DataReader對象允許開發人員獲得從Command對象的SELECT語句得到的結果。考慮性能的因素,從DataReader返回的數據都是快速的且只是“向前”的數據流。這意味著開發人員只能按照一定的順序從數據流中取出數據。這對於速度來說是有好處的,但是如果開發人員需要運算元據,更好的辦法是使用DataSet。

DataSet對象

DataSet對象是數據在記憶體中的表示形式。它包括多個DataTable對象,而DataTable包含列和行,就象一個普通的資料庫中的表。開發人員甚至能夠定義表之間的關係來創建主從關係(parent-child relationships)。DataSet是在特定的場景下使用――幫助管理記憶體中的數據並支持對數據的斷開操作的。DataSet是被所有Data Providers使用的對象,因此它並不像Data Provider一樣需要特別的前綴。

DataAdapter類

某些時候開發人員使用的數據主要是唯讀的,並且開發人員很少需要將其改變至底層的數據源。同樣一些情況要求在記憶體中快取數據,以此來減少並不改變的數據被資料庫調用的次數。DataAdapter通過斷開模型來幫助開發人員方便的完成對以上情況的處理。當在一單批次的對資料庫的讀寫操作的持續的改變返回至資料庫的時候,DataAdapter 填充(fill)DataSet對象。DataAadapter包含對連線對象以及當對資料庫進行讀取或者寫入的時候自動的打開或者關閉連線的引用。另外,DataAdapter包含對數據的SELECT、INSERT、UPDATE和DELETE操作的Command對象引用。開發人員將為DataSet中的每一個Table都定義DataAadapter,它將為開發人員照顧所有與資料庫的連線。所以開發人員將做的工作是告訴DataAdapter什麼時候裝載或者寫入到資料庫。

DataTable類

DataTable是一個數據格線控制項。它可以被套用在VB和ASP上。它無須代碼就可以簡單的綁定資料庫。它具有微軟風格的用戶界面。

DataTable的實例化以及添加列:

DataTable dt=new DataTable();

dt.Columns.Add("ID");

dt.Columns.Add("Name");

DataRow dr=dt.NewRow();

object[] objs={1,"Name"};

dr.ItemArray=objs;

dt.Rows.Add(dr);

this.dataGridView1.DataSource=dt;

相關詞條

相關搜尋

熱門詞條

聯絡我們