複製鏈接
請複製以下鏈接發送給好友

ADO.NET

鎖定
ADO.NET的名稱起源於ADO(ActiveX Data Objects),是一個COM組件庫,用於在以往的Microsoft技術中訪問數據。之所以使用ADO.NET名稱,是因為Microsoft希望表明,這是在NET編程環境中優先使用的數據訪問接口。
外文名
ActiveX Data Objects
發佈單位
微軟公司
分    類
數據訪問接口
特    點
平台互用性
起    源
ADO(ActiveX Data Objects)
性    質
COM組件庫

目錄

ADO.NET功能

ado.net可讓開發人員以一致的方式存取資料來源(例如 SQL Server 與 XML),以及透過 OLE DBODBC 所公開的資料來源。資料共用的消費者應用程序可使用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 組件無法區分使用者的私用資料與非私用資料。這些組件不會收集、儲存或傳輸任何使用者的私用資料。不過,協力廠商應用程序可能會使用這些組件來收集、存儲或傳輸使用者的私用資料。

ADO.NET發展

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平台中唯一的資料存取元件。 [1] 

ADO.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) 及資料的相關資訊。
右圖《ADO.NET 架構》説明 .NET Framework 資料提供者與 DataSet 之間的關聯性。

ADO.NET作用

它提供了平台互用性和可伸縮的數據訪問,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,並且通常是以與之交互的協議和數據源的類型來命名的。 [2] 
ado.net是與數據源交互的.NET技術。有許多的Data Providers,它將允許與不同的數據源交流――取決於它們所使用的協議或者數據庫。然而無論使用什麼樣的Data Provider,開發人員將使用相似的對象與數據源進行交互。SqlConnection對象管理與數據源的連接。SqlCommand對象允許開發人員與數據源交流併發送命令給它。為了對進行快速的只“向前”地讀取數據,使用SqlDataReader。如果想使用斷開數據,使用DataSet並實現能進行讀取或者寫入數據源的SqlDataAdapter。 [3] 

ADO.NET類庫

Connection 類
和數據庫交互,必須連接它。連接幫助指明數據庫服務器、數據庫名字、用户名、密碼,和連接數據庫所需要的其它參數。Connection對象會被Command對象使用,這樣就能夠知道是在哪個數據源上面執行命令。
與數據庫交互的過程意味着必須指明想要執行的操作。這是依靠Command對象執行的。開發人員使用Command對象來發送SQL語句給數據庫。Command對象使用Connection對象來指出與哪個數據源進行連接。開發人員能夠單獨使用Command對象來直接執行命令,或者將一個Command對象的引用傳遞給DataAdapter,它保存了一組能夠操作下面描述的一組數據的命令。 [3] 
Command對象
成功與數據建立連接後,就可以用Command對象來執行查詢、修改、插入、刪除等命令;Command對象常用的方法有ExecuteReader()方法、ExecuteScalar()方法和ExecuteNonQuery()方法;插入數據可用ExecuteNonQuery()方法來執行插入命令。 [3] 
DataReader類
許多數據操作要求開發人員只是讀取一串數據。DataReader對象允許開發人員獲得從Command對象的SELECT語句得到的結果。考慮性能的因素,從DataReader返回的數據都是快速的且只是“向前”的數據流。這意味着開發人員只能按照一定的順序從數據流中取出數據。這對於速度來説是有好處的,但是如果開發人員需要操作數據,更好的辦法是使用DataSet。 [3] 
DataSet對象
DataSet對象是數據在內存中的表示形式。它包括多個DataTable對象,而DataTable包含列和行,就象一個普通的數據庫中的表。開發人員甚至能夠定義表之間的關係來創建主從關係(parent-child relationships)。DataSet是在特定的場景下使用――幫助管理內存中的數據並支持對數據的斷開操作的。DataSet是被所有Data Providers使用的對象,因此它並不像Data Provider一樣需要特別的前綴。 [3] 
DataAdapter類
某些時候開發人員使用的數據主要是隻讀的,並且開發人員很少需要將其改變至底層的數據源。同樣一些情況要求在內存中緩存數據,以此來減少並不改變的數據被數據庫調用的次數。DataAdapter通過斷開模型來幫助開發人員方便的完成對以上情況的處理。當在一單批次的對數據庫的讀寫操作的持續的改變返回至數據庫的時候,DataAdapter 填充(fill)DataSet對象。DataAadapter包含對連接對象以及當對數據庫進行讀取或者寫入的時候自動的打開或者關閉連接的引用。另外,DataAdapter包含對數據的SELECT、INSERT、UPDATE和DELETE操作的Command對象引用。開發人員將為DataSet中的每一個Table都定義DataAadapter,它將為開發人員照顧所有與數據庫的連接。所以開發人員將做的工作是告訴DataAdapter什麼時候裝載或者寫入到數據庫。 [3] 
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; [3] 
參考資料
  • 1.    ADO+  .ADO+ - .NET tutorial - developer Fusion[引用日期2012-07-18]
  • 2.    (美)Karli Watson Christian Nagel 齊立波 譯.C#入門經典第3版:清華大學出版社,2006 年5月:655
  • 3.    ADO.NET包含的類  .ADO.NET包含的類 - linxianliang5201314的專欄 - 博客頻道 - CSDN.NET[引用日期2012-07-18]