ADO.NET 提供了前端控制項和後端資料庫之間的橋樑。 ADO.NET 物件封裝了與資料顯示物件互動的所有的資料存取操作和控制項。因此便隱藏了資料移動的細節。
下列圖表整體展示了ADO.NET 物件:
資料集代表了資料庫的子集。它和資料庫沒有持續的連接。為了升級資料庫需要重新連線。 DataSet 包括了DataTable 和DataRelation 物件。 DataRelation 物件代表了兩張表之間的關係。
下表是DataSet 類別的一些重要屬性:
屬性 | 描述 |
---|---|
CaseSensitive | 說明和資料表進行比較的字串是否區分大小寫。 |
Container | 為組件取得空間。 |
DataSetName | 取得或設定現有資料集合的名稱。 |
DefaultViewManager | 傳回資料集合中的資料視圖。 |
DesignMode | 表示組件是否處於設計模式下。 |
EnforceConstraints | 表示嘗試上傳文件時是否遵循限制條件。 |
Events | 取得與本元件相關的事件處理器清單。 |
ExtendedProperties | 取得與DataSet 相關的自訂使用者的資訊的集合。 |
HasErrors | 表示是否有任何錯誤。 |
IsInitialized | 表明DataSet 是否初始化。 |
Locale | 取得或設定用來和表格比較字串的資訊。 |
Namespace | 取得或設定DataSet 的命名空間。 |
Prefix | 取得或設定一個XML 前綴,它是命名空間的別名。 |
Relations | 傳回DataRelation 物件的集合。 |
Tables | 傳回DataTable 物件的集合。 |
下表列出來DataSet 類別的一些重要方法:
方法 | 描述 |
---|---|
AcceptChanges | 接受所有由於裝載DataSet 或這個方法的變更。 |
BeginInit | 開始DataSet 的初始化。該初始化發生在運行時。 |
Clear | 清除資料。 |
Clone | 克隆包括所有DataTable 的結構、關係和限制在內的DataSet 的結構。但是不克隆資料。 |
Copy | 複製資料和結構。 |
CreateDataReader() | 為每個DataTable 傳回帶有一個結果集的DataTableReader,順序與Tables 集合中表格的顯示順序相同。 |
CreateDataReader(DataTable[]) | 為每個DataTable 傳回帶有一個結果集DataTableReader。 |
EndInit | 結束在窗體上使用或由另一個元件使用的DataSet 的初始化。初始化發生在運行時。 |
Equals(Object) | 確定指定的物件是否等於目前物件。 |
Finalize | 釋放資源執行其他清除。 |
GetChanges | 取得DataSet 的副本,該副本包含自載入以來或自上次呼叫AcceptChanges 以來對該資料集進行的所有變更。 |
GetChanges(DataRowState) | 取得由DataRowState 篩選的DataSet 的副本,該副本包含上次載入以來或呼叫AcceptChanges 以來對該資料集進行的所有變更。 |
GetDataSetSchema | 為DataSet 取得XmlSchemaSet 副本。 |
GetObjectData | 用序列化DataSet 所需的資料填入序列化資訊物件。 |
GetType | 取得目前實例的Type。 |
GetXML | 傳回儲存在DataSet 中的資料的XML 表示形式。 |
GetXMLSchema | 傳回儲存在DataSet 中的資料的XML 表示形式的XML 架構。 |
HasChanges() | 取得一個值,該值指示DataSet 是否有更改,包括新增行、已刪除的行或已修改的行。 |
HasChanges(DataRowState) | 取得一個值,該值指示DataSet 是否有DataRowState 被篩選的更改,包括新增行、已刪除的行或已修改的行。 |
IsBinarySerialized | 檢查DataSet 的序列化表示形式的格式。 |
Load(IDataReader, LoadOption, DataTable[]) | 使用提供的IDataReader 以資料來源的值填入DataSet,同時使用DataTable 實例的陣列提供架構和命名空間資訊。 |
Load(IDataReader, LoadOption, String[]) | 使用所提供的IDataReader,並使用字串陣列為DataSet 中的表提供名稱,從而用來自資料來源的值填入DataSet。 |
Merge() | 將指定的DataSet、DataTable 或DataRow 物件的數組合併到目前的DataSet 或DataTable 中。這種方法有不同的重載形式。 |
ReadXML() | 將XML 架構和資料讀入DataSet。這種方法有不同的重載形式。 |
ReadXMLSchema(0) | 將XML 架構讀入DataSet。這種方法有不同的重載形式。 |
RejectChanges | 回滾自建立DataSet 以來或上次呼叫DataSet.AcceptChanges 以來對其進行的所有變更。 |
WriteXML() | 從DataSet 寫XML 資料和架構。這種方法有不同的重載形式。 |
WriteXMLSchema() | 從DataSet 寫XML 架構。這種方法有不同的重載形式。 |
DataTable 類別代表了資料庫中的表。它有以下的重要屬性:大多數屬性都是唯讀屬性除了PrimaryKey 屬性:
屬性 | 描述 |
---|---|
ChildRelations | 取得此DataTable 的子關係的集合。 |
Columns | 取得屬於該表的列的集合。 |
Constraints | 取得由該表維護的約束的集合。 |
DataSet | 取得此表所屬的DataSet。 |
DefaultView | 取得可能包括篩選視圖或遊標位置的表的自訂視圖。 |
ParentRelations | 取得該DataTable 的父關係的集合。 |
PrimaryKey | 取得或設定充當資料表主鍵的列的陣列。 |
Rows | 取得屬於該表的行的集合。 |
下表列示出了一些DataTable 類別的重要方法:
方法 | 描述 |
---|---|
AcceptChanges | 提交自載入此DataSet 或上次呼叫AcceptChanges 以來對其進行的所有變更。 |
Clear | 透過移除所有表中的所有行來清除任何資料的DataSet。 |
GetChanges | 取得DataSet 的副本,該副本包含自上次載入以來或自呼叫AcceptChanges 以來對該資料集進行的所有變更。 |
GetErrors | 取得包含錯誤的DataRow 物件的陣列。 |
ImportRows | 將DataRow 複製到DataTable 中,保留任何屬性設定以及初始值和目前值。 |
LoadDataRow | 尋找和更新特定行。 如果找不到任何符合行,則使用給定值建立新行。 |
Merge | 將指定的DataSet、DataTable 或DataRow 物件的數組合併到目前的DataSet 或DataTable 中。 |
NewRow | 建立與該表具有相同架構的新DataRow。 |
RejectChanges | 回滾自該表載入以來或上次呼叫AcceptChanges 以來對該表進行的所有變更。 |
Reset | 清除所有表並從DataSet 中刪除所有關係、外部限制和表。 子類別應重寫Reset,以便將DataSet 還原到其原始狀態。 |
Select | 取得DataRow 物件的陣列。 |
DataRow 物件代表了表格中的一行,它有如下的重要屬性:
屬性 | 描述 |
---|---|
HasErrors | 表示是否有錯誤。 |
Items | 取得或設定儲存在特定欄目的資料。 |
ItemArrays | 取得或設定本行中所有的值。 |
Table | 返回父表。 |
下表列示了DataRow 類別的重要方法:
方法 | 描述 |
---|---|
AcceptChanges | 應用呼叫該方法後的所有變更。 |
BeginEdit | 開始編輯操作。 |
CancelEdit | 取消編輯操作。 |
Delete | 刪除資料行。 |
EndEdit | 結束編輯操作。 |
GetChildRows | 取得本行的子行。 |
GetParentRow | 取得父行。 |
GetParentRows | 取得DataRow 的父行。 |
RejectChanges | 回滾所有AcceptChanges 呼叫後的變更。 |
DataAdapter 物件扮演DataSet 物件與資料庫之間的中間者。這有助於DataSet 從多種資料庫或其他資料來源取得資料。
DataReader 物件是DataSet 和DataAdapter 結合的備選。這個物件提供了對資料庫中的資料記錄的定向的存取。這些物件只適合唯讀訪問,例如填滿一個清單然後斷開連接。
DbConnection 物件代表了資料來源的連線。這種連線可以在不同的命令物件間共用。 DbCommand 物件代表了從檢索或操縱資料傳送到資料庫的命令或或一個儲存的進程。
到目前為止,我們已經應用了我們電腦中的表格和資料庫。在本案例中,我們將建立一個表,新增欄目,行和數據,並且用GridView 控制項顯示表。
原始檔碼如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="createdatabase._Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title> Untitled Page </title> </head> <body> <form id="form1" runat="server"> <div> <asp:GridView ID="GridView1" runat="server"> </asp:GridView> </div> </form> </body></html>
文件的程式碼如下:
namespace createdatabase{ public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { DataSet ds = CreateDataSet(); GridView1.DataSource = ds.Tables["Student"]; GridView1.DataBind(); } } private DataSet CreateDataSet() { //creating a DataSet object for tables DataSet dataset = new DataSet(); // creating the student table DataTable Students = CreateStudentTable(); dataset.Tables.Add(Students); return dataset; } private DataTable CreateStudentTable() { DataTable Students = new DataTable("Student"); // adding columns AddNewColumn(Students, "System.Int32", "StudentID"); AddNewColumn(Students, "System.String", "StudentName"); AddNewColumn(Students, "System.String", "StudentCity"); // adding rows AddNewRow(Students, 1, "MH Kabir", "Kolkata"); AddNewRow(Students, 1, "Shreya Sharma", "Delhi"); AddNewRow(Students, 1, "Rini Mukherjee", "Hyderabad"); AddNewRow(Students, 1, "Sunil Dubey", "Bikaner"); AddNewRow(Students, 1, "Rajat Mishra", "Patna"); return Students; } private void AddNewColumn(DataTable table, string columnType, string columnName) { DataColumn column = table.Columns.Add(columnName, Type.GetType(columnType)); } //adding data into the table private void AddNewRow(DataTable table, int id, string name, string city) { DataRow newrow = table.NewRow(); newrow["StudentID"] = id; newrow["StudentName"] = name; newrow["StudentCity"] = city; table.Rows.Add(newrow); } }}
當你執行程式時,觀察以下幾個方面:
程式首先建立應一個資料集合然後用GridView 控制項的DataBind() 方法約束它。
Createdataset() 方法是使用者定義功能,它可以建立一個新的DataSet 物件並且呼叫其他的使用者定義的CreateStudentTable() 方法來建立表格然後將他們新增到資料集合的表格集合中。
CreateStudentTable() 方法呼叫使用者定義的AddNewColumn() 和AddNewRow() 方法來建立表格的欄位和行同時在行中新增資料。當頁面被執行,它傳回的表的行如下圖所示: