天天看點

資料庫通路技術(二)---ADO.NET

ADO.NET的名稱起源于ADO(ActiveX Data Objects),是一個COM元件庫,用于在以往的Microsoft技術中通路資料。之是以使用ADO.NET名稱,是因為Microsoft希望表明,這是在NET程式設計環境中優先使用的資料通路接口。

  • 外文名
  • ActiveX Data Objects
  • 釋出機關
  • 微軟公司
  • 分    類
  • 資料通路接口
  • 特    點
  • 平台互用性

簡介

編輯

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

架構

傳統的資料處理主要是依賴互相連接配接的雙層式模型。随着資料處理朝多層次架構發展,程式設計人員也逐漸改用中斷連接配接的方式,使應用程式更具延展性(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 DataSet

的設計已明确指出它可獨立于任何資料來源外而存取資料。是以,它可與多個不同的資料裡來源搭配使用、與 XML

資料搭配使用,或用于管理應用程式的本機資料。DataSet 包含一或多個由資料列和資料行所組成的 DataTable 物件集合,以及

DataTable 物件中的主索引鍵、外部索引鍵、條件限制 (Constraint) 及資料的相關資訊。

資料庫通路技術(二)---ADO.NET

ADO.NET 架構

右圖說明 .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,并且通常是以與之互動的協定和資料源的類型來命名的。[2] 

ado.net是與資料源互動的.NET技術。有許多的Data

Providers,它将允許與不同的資料源交流――取決于它們所使用的協定或者資料庫。然而無論使用什麼樣的Data

Provider,開發人員将使用相似的對象與資料源進行互動。SqlConnection對象管理與資料源的連接配接。SqlCommand對象允許開發人員與資料源交流并發送指令給它。為了對進行快速的隻“向前”地讀取資料,使用SqlDataReader。如果想使用斷開資料,使用DataSet并實作能進行讀取或者寫入資料源的SqlDataAdapter。[3] 

類庫

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]