- ASP.NET 教程
- ASP.NET - 首頁
- ASP.NET - 簡介
- ASP.NET - 環境
- ASP.NET - 生命週期
- ASP.NET - 第一個示例
- ASP.NET - 事件處理
- ASP.NET - 伺服器端
- ASP.NET - 伺服器控制元件
- ASP.NET - HTML 伺服器控制元件
- ASP.NET - 客戶端
- ASP.NET - 基本控制元件
- ASP.NET - 指令
- ASP.NET - 狀態管理
- ASP.NET - 驗證器
- ASP.NET - 資料庫訪問
- ASP.NET - ADO.net
- ASP.NET - 檔案上傳
- ASP.NET - 廣告輪播
- ASP.NET - 日曆控制元件
- ASP.NET - 多檢視
- ASP.NET - 面板控制元件
- ASP.NET - AJAX 控制元件
- ASP.NET - 資料來源
- ASP.NET - 資料繫結
- ASP.NET - 自定義控制元件
- ASP.NET - 個性化
- ASP.NET - 錯誤處理
- ASP.NET - 除錯
- ASP.NET - LINQ
- ASP.NET - 安全性
- ASP.NET - 資料快取
- ASP.NET - Web 服務
- ASP.NET - 多執行緒
- ASP.NET - 配置
- ASP.NET - 部署
- ASP.NET 資源
- ASP.NET - 快速指南
- ASP.NET - 有用資源
- ASP.NET - 討論
ADO.NET
ADO.NET 在前端控制元件和後端資料庫之間架起了一座橋樑。ADO.NET 物件封裝了所有資料訪問操作,控制元件與這些物件互動以顯示資料,從而隱藏了資料移動的細節。
下圖概覽了 ADO.NET 物件
DataSet 類
資料集表示資料庫的一個子集。它沒有與資料庫的持續連線。要更新資料庫,需要重新連線。DataSet 包含 DataTable 物件和 DataRelation 物件。DataRelation 物件表示兩個表之間的關係。
下表顯示了 DataSet 類的一些重要屬性
| 屬性 | 描述 |
|---|---|
| CaseSensitive | 指示資料表中字串比較是否區分大小寫。 |
| Container | 獲取元件的容器。 |
| DataSetName | 獲取或設定當前資料集的名稱。 |
| DefaultViewManager | 返回資料集中的資料檢視。 |
| DesignMode | 指示元件當前是否處於設計模式。 |
| EnforceConstraints | 指示在嘗試任何更新操作時是否遵循約束規則。 |
| 事件 | 獲取附加到此元件的事件處理程式列表。 |
| ExtendedProperties | 獲取與 DataSet 關聯的自定義使用者資訊集合。 |
| HasErrors | 指示是否存在任何錯誤。 |
| IsInitialized | 指示 DataSet 是否已初始化。 |
| Locale | 獲取或設定用於在表內比較字串的區域性資訊。 |
| Namespace | 獲取或設定 DataSet 的名稱空間。 |
| Prefix | 獲取或設定一個 XML 字首,該字首為 DataSet 的名稱空間指定別名。 |
| Relations | 返回 DataRelation 物件的集合。 |
| Tables | 返回 DataTable 物件的集合。 |
下表顯示了 DataSet 類的一些重要方法
| 方法 | 描述 |
|---|---|
| AcceptChanges | 接受自載入 DataSet 或上次呼叫此方法以來所做的所有更改。 |
| BeginInit | 開始 DataSet 的初始化。初始化在執行時發生。 |
| Clear | 清除資料。 |
| Clone | 複製 DataSet 的結構,包括所有 DataTable 架構、關係和約束。不復制任何資料。 |
| Copy | 複製結構和資料。 |
| CreateDataReader() | 返回一個 DataTableReader,每個 DataTable 一個結果集,與表在 Tables 集合中出現的順序相同。 |
| CreateDataReader(DataTable[]) | 返回一個 DataTableReader,每個 DataTable 一個結果集。 |
| EndInit | 結束資料集的初始化。 |
| Equals(Object) | 確定指定的 Object 是否等於當前 Object。 |
| Finalize | 釋放資源並執行其他清理操作。 |
| GetChanges | 返回 DataSet 的副本,其中包含自載入或呼叫 AcceptChanges 方法以來所做的所有更改。 |
| GetChanges(DataRowState) | 獲取 DataSet 的副本,其中包含自載入或呼叫 AcceptChanges 方法以來所做的所有更改,並按 DataRowState 過濾。 |
| GetDataSetSchema | 獲取 DataSet 的 XmlSchemaSet 副本。 |
| GetObjectData | 使用序列化 DataSet 所需的資料填充序列化資訊物件。 |
| GetType | 獲取當前例項的型別。 |
| GetXML | 返回資料的 XML 表示形式。 |
| GetXMLSchema | 返回資料的 XML 表示形式的 XSD 架構。 |
| HasChanges() | 獲取一個值,該值指示 DataSet 是否有更改,包括新行、已刪除行或已修改行。 |
| HasChanges(DataRowState) | 獲取一個值,該值指示 DataSet 是否有更改,包括新行、已刪除行或已修改行,並按 DataRowState 過濾。 |
| IsBinarySerialized | 檢查 DataSet 的序列化表示形式的格式。 |
| Load(IDataReader, LoadOption, DataTable[]) | 使用提供的 IDataReader 從資料來源填充 DataSet,使用 DataTable 例項陣列提供架構和名稱空間資訊。 |
| Load(IDataReader, LoadOption, String[]) | 使用提供的 IDataReader 從資料來源填充 DataSet,使用字串陣列為 DataSet 中的表提供名稱。 |
| Merge() | 將資料與來自另一個 DataSet 的資料合併。此方法具有不同的過載形式。 |
| ReadXML() | 將 XML 架構和資料讀取到 DataSet 中。此方法具有不同的過載形式。 |
| ReadXMLSchema(0) | 將 XML 架構讀取到 DataSet 中。此方法具有不同的過載形式。 |
| RejectChanges | 回滾自上次呼叫 AcceptChanges 以來所做的所有更改。 |
| WriteXML() | 從 DataSet 寫入 XML 架構和資料。此方法具有不同的過載形式。 |
| WriteXMLSchema() | 將 DataSet 的結構作為 XML 架構寫入。此方法具有不同的過載形式。 |
DataTable 類
DataTable 類表示資料庫中的表。它具有以下重要屬性;除了 PrimaryKey 屬性外,大多數屬性都是隻讀屬性
| 屬性 | 描述 |
|---|---|
| ChildRelations | 返回子關係的集合。 |
| Columns | 返回 Columns 集合。 |
| Constraints | 返回 Constraints 集合。 |
| DataSet | 返回父 DataSet。 |
| DefaultView | 返回表的檢視。 |
| ParentRelations | 返回 ParentRelations 集合。 |
| PrimaryKey | 獲取或設定一組列作為表的主鍵。 |
| Rows | 返回 Rows 集合。 |
下表顯示了 DataTable 類的一些重要方法
| 方法 | 描述 |
|---|---|
| AcceptChanges | 提交自上次 AcceptChanges 以來所做的所有更改。 |
| Clear | 清除表中的所有資料。 |
| GetChanges | 返回 DataTable 的副本,其中包含自呼叫 AcceptChanges 方法以來所做的所有更改。 |
| GetErrors | 返回包含錯誤的行陣列。 |
| ImportRows | 將新行復制到表中。 |
| LoadDataRow | 查詢並更新特定行,如果未找到任何行,則建立新行。 |
| Merge | 將表與另一個 DataTable 合併。 |
| NewRow | 建立一個新的 DataRow。 |
| RejectChanges | 回滾自上次呼叫 AcceptChanges 以來所做的所有更改。 |
| Reset | 將表重置為其原始狀態。 |
| Select | 返回 DataRow 物件陣列。 |
DataRow 類
DataRow 物件表示表中的一行。它具有以下重要屬性
| 屬性 | 描述 |
|---|---|
| HasErrors | 指示是否存在任何錯誤。 |
| Items | 獲取或設定儲存在特定列中的資料。 |
| ItemArrays | 獲取或設定行的所有值。 |
| Table | 返回父表。 |
下表顯示了 DataRow 類的一些重要方法
| 方法 | 描述 |
|---|---|
| AcceptChanges | 接受自上次呼叫此方法以來所做的所有更改。 |
| BeginEdit | 開始編輯操作。 |
| CancelEdit | 取消編輯操作。 |
| Delete | 刪除 DataRow。 |
| EndEdit | 結束編輯操作。 |
| GetChildRows | 獲取此行的子行。 |
| GetParentRow | 獲取父行。 |
| GetParentRows | 獲取 DataRow 物件的父行。 |
| RejectChanges | 回滾自上次呼叫 AcceptChanges 以來所做的所有更改。 |
DataAdapter 物件
DataAdapter 物件充當 DataSet 物件和資料庫之間的中介。這有助於 DataSet 包含來自多個數據庫或其他資料來源的資料。
DataReader 物件
DataReader 物件是 DataSet 和 DataAdapter 組合的替代方案。此物件提供了對資料庫中資料記錄的面向連線的訪問。這些物件適用於只讀訪問,例如填充列表,然後斷開連線。
DbCommand 和 DbConnection 物件
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, "M H 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() 來建立表並將其新增到資料集的 Tables 集合中。
CreateStudentTable() 方法呼叫使用者自定義方法 AddNewColumn() 和 AddNewRow() 來建立表的列和行,以及向行中新增資料。
頁面執行後,將返回表中的行,如所示