鍍金池/ 教程/ C#/ ADO.NET
調(diào)試
管理狀態(tài)
Panel 控件
Web 服務(wù)
語(yǔ)言集成查詢(xún)
數(shù)據(jù)源
基礎(chǔ)控件
廣告輪轉(zhuǎn)器
服務(wù)器端
服務(wù)器控件
ADO.NET
多線(xiàn)程
HTML 服務(wù)器
生命周期
Ajax 控制
客戶(hù)端
異常處理
環(huán)境設(shè)置
部署
個(gè)性化
驗(yàn)證器
多視圖
日歷
文件上傳
ASP.NET - 數(shù)據(jù)綁定
數(shù)據(jù)庫(kù)存取
實(shí)例
自定義控件
簡(jiǎn)介
配置
數(shù)據(jù)緩存
安全性
指令
事件處理

ADO.NET

ADO.NET 提供了前端控件和后端數(shù)據(jù)庫(kù)之間的橋梁。ADO.NET 對(duì)象封裝了與數(shù)據(jù)顯示對(duì)象相互作用的所有的數(shù)據(jù)存取操作和控件。因此便隱藏了數(shù)據(jù)移動(dòng)的細(xì)節(jié)。

下列圖表整體展示了 ADO.NET 對(duì)象:

http://wiki.jikexueyuan.com/project/asp-net/images/ado.net_objects.jpg" alt="" />

DataSet 類(lèi)

數(shù)據(jù)集代表了數(shù)據(jù)庫(kù)的一個(gè)子集。它和數(shù)據(jù)庫(kù)沒(méi)有持續(xù)的連接。為了升級(jí)數(shù)據(jù)庫(kù)需要進(jìn)行重新連接。DataSet 包括了 DataTable 和 DataRelation 對(duì)象。DataRelation 對(duì)象代表了兩張表之間的關(guān)系。

下表是 DataSet 類(lèi)的一些重要屬性:

屬性 描述
CaseSensitive 說(shuō)明和數(shù)據(jù)表進(jìn)行對(duì)比的字符串是否區(qū)分大小寫(xiě)。
Container 為組件獲取空間。
DataSetName 獲取或者設(shè)置現(xiàn)有數(shù)據(jù)集合的名稱(chēng)。
DefaultViewManager 返回?cái)?shù)據(jù)集合中的數(shù)據(jù)視圖。
DesignMode 表明組件是否處于設(shè)計(jì)模式下。
EnforceConstraints 表明嘗試上傳文件時(shí)是否遵循限制條件。
Events 獲取與本組件相關(guān)的事件處理器列表。
ExtendedProperties 獲取與 DataSet 相關(guān)的自定義用戶(hù)的信息的集合。
HasErrors 表明是否有任何錯(cuò)誤。
IsInitialized 表明 DataSet 是否初始化。
Locale 獲取或者設(shè)置用來(lái)和表比較字符串的信息。
Namespace 獲取或者設(shè)置 DataSet 的命名空間。
Prefix 獲取或者設(shè)置一個(gè) XML 前綴,它是命名空間的別名。
Relations 返回 DataRelation 對(duì)象的集合。
Tables 返回 DataTable 對(duì)象的集合。

下表列出來(lái) DataSet 類(lèi)的一些重要方法:

方法 描述
AcceptChanges 接受所有由于裝載 DataSet 或者這個(gè)方法的更改。
BeginInit 開(kāi)始 DataSet 的初始化。該初始化發(fā)生在運(yùn)行時(shí)。
Clear 清除數(shù)據(jù)。
Clone 克隆包括所有 DataTable 的結(jié)構(gòu)、關(guān)系和限制在內(nèi)的 DataSet 的結(jié)構(gòu)。但是不克隆數(shù)據(jù)。
Copy 復(fù)制數(shù)據(jù)和結(jié)構(gòu)。
CreateDataReader() 為每個(gè) DataTable 返回帶有一個(gè)結(jié)果集的 DataTableReader,順序與 Tables 集合中表的顯示順序相同。
CreateDataReader(DataTable[]) 為每個(gè) DataTable 返回帶有一個(gè)結(jié)果集 DataTableReader。
EndInit 結(jié)束在窗體上使用或由另一個(gè)組件使用的 DataSet 的初始化。初始化發(fā)生在運(yùn)行時(shí)。
Equals(Object) 確定指定的對(duì)象是否等于當(dāng)前對(duì)象。
Finalize 釋放資源執(zhí)行其他清除。
GetChanges 獲取 DataSet 的副本,該副本包含自加載以來(lái)或自上次調(diào)用 AcceptChanges 以來(lái)對(duì)該數(shù)據(jù)集進(jìn)行的所有更改。
GetChanges(DataRowState) 獲取由 DataRowState 篩選的 DataSet 的副本,該副本包含上次加載以來(lái)或調(diào)用 AcceptChanges 以來(lái)對(duì)該數(shù)據(jù)集進(jìn)行的所有更改。
GetDataSetSchema 為 DataSet 獲取 XmlSchemaSet 副本。
GetObjectData 用序列化 DataSet 所需的數(shù)據(jù)填充序列化信息對(duì)象。
GetType 獲取當(dāng)前實(shí)例的 Type。
GetXML 返回存儲(chǔ)在 DataSet 中的數(shù)據(jù)的 XML 表示形式。
GetXMLSchema 返回存儲(chǔ)在 DataSet 中的數(shù)據(jù)的 XML 表示形式的 XML 架構(gòu)。
HasChanges() 獲取一個(gè)值,該值指示 DataSet 是否有更改,包括新增行、已刪除的行或已修改的行。
HasChanges(DataRowState) 獲取一個(gè)值,該值指示 DataSet 是否有 DataRowState 被篩選的更改,包括新增行、已刪除的行或已修改的行。
IsBinarySerialized 檢查 DataSet 的序列化表示形式的格式。
Load(IDataReader, LoadOption, DataTable[]) 使用提供的 IDataReader 以數(shù)據(jù)源的值填充 DataSet,同時(shí)使用 DataTable 實(shí)例的數(shù)組提供架構(gòu)和命名空間信息。
Load(IDataReader, LoadOption, String[]) 使用所提供的 IDataReader,并使用字符串?dāng)?shù)組為 DataSet 中的表提供名稱(chēng),從而用來(lái)自數(shù)據(jù)源的值填充 DataSet。
Merge() 將指定的 DataSet、DataTable 或 DataRow 對(duì)象的數(shù)組合并到當(dāng)前的 DataSet 或 DataTable 中。這種方法有不同的重載形式。
ReadXML() 將 XML 架構(gòu)和數(shù)據(jù)讀入 DataSet。這種方法有不同的重載形式。
ReadXMLSchema(0) 將 XML 架構(gòu)讀入 DataSet。這種方法有不同的重載形式。
RejectChanges 回滾自創(chuàng)建 DataSet 以來(lái)或上次調(diào)用 DataSet.AcceptChanges 以來(lái)對(duì)其進(jìn)行的所有更改。
WriteXML() 從 DataSet 寫(xiě) XML 數(shù)據(jù)和架構(gòu)。這種方法有不同的重載形式。
WriteXMLSchema() 從 DataSet 寫(xiě) XML 架構(gòu)。這種方法有不同的重載形式。

DataTable 類(lèi)

DataTable 類(lèi)代表了數(shù)據(jù)庫(kù)中的表。它有如下的重要屬性:大多數(shù)屬性都是只讀屬性除了 PrimaryKey 屬性:

屬性 描述
ChildRelations 獲取此 DataTable 的子關(guān)系的集合。
Columns 獲取屬于該表的列的集合。
Constraints 獲取由該表維護(hù)的約束的集合。
DataSet 獲取此表所屬的 DataSet。
DefaultView 獲取可能包括篩選視圖或游標(biāo)位置的表的自定義視圖。
ParentRelations 獲取該 DataTable 的父關(guān)系的集合。
PrimaryKey 獲取或設(shè)置充當(dāng)數(shù)據(jù)表主鍵的列的數(shù)組。
Rows 獲取屬于該表的行的集合。

下表列示出了一些 DataTable 類(lèi)的重要方法:

方法 描述
AcceptChanges 提交自加載此 DataSet 或上次調(diào)用 AcceptChanges 以來(lái)對(duì)其進(jìn)行的所有更改。
Clear 通過(guò)移除所有表中的所有行來(lái)清除任何數(shù)據(jù)的 DataSet。
GetChanges 獲取 DataSet 的副本,該副本包含自上次加載以來(lái)或自調(diào)用 AcceptChanges 以來(lái)對(duì)該數(shù)據(jù)集進(jìn)行的所有更改。
GetErrors 獲取包含錯(cuò)誤的 DataRow 對(duì)象的數(shù)組。
ImportRows 將 DataRow 復(fù)制到 DataTable 中,保留任何屬性設(shè)置以及初始值和當(dāng)前值。
LoadDataRow 查找和更新特定行。 如果找不到任何匹配行,則使用給定值創(chuàng)建新行。
Merge 將指定的 DataSet、DataTable 或 DataRow 對(duì)象的數(shù)組合并到當(dāng)前的 DataSet 或 DataTable 中。
NewRow 創(chuàng)建與該表具有相同架構(gòu)的新 DataRow。
RejectChanges 回滾自該表加載以來(lái)或上次調(diào)用 AcceptChanges 以來(lái)對(duì)該表進(jìn)行的所有更改。
Reset 清除所有表并從 DataSet 中刪除所有關(guān)系、外部約束和表。 子類(lèi)應(yīng)重寫(xiě) Reset,以便將 DataSet 還原到其原始狀態(tài)。
Select 獲取 DataRow 對(duì)象的數(shù)組。

DataRow 類(lèi)

DataRow 對(duì)象代表了表中的一行,它有如下的重要屬性:

屬性 描述
HasErrors 表明是否有錯(cuò)誤。
Items 獲取或者設(shè)置存儲(chǔ)在特定欄目的數(shù)據(jù)。
ItemArrays 獲取或者設(shè)置本行中所有的值。
Table 返回父表。

下表列示了 DataRow 類(lèi)的重要方法:

方法 描述
AcceptChanges 應(yīng)用調(diào)用該方法后的所有更改。
BeginEdit 開(kāi)始編輯操作。
CancelEdit 取消編輯操作。
Delete 刪除數(shù)據(jù)行。
EndEdit 結(jié)束編輯操作。
GetChildRows 獲取本行的子行。
GetParentRow 獲取父行。
GetParentRows 獲取 DataRow 的父行。
RejectChanges 回滾所有 AcceptChanges 調(diào)用后的更改。

DataAdapter 對(duì)象

DataAdapter 對(duì)象扮演 DataSet 對(duì)象與數(shù)據(jù)庫(kù)之間的中間者。這有助于 DataSet 從多種數(shù)據(jù)庫(kù)或者其他數(shù)據(jù)源獲取數(shù)據(jù)。

DataReader 對(duì)象

DataReader 對(duì)象是 DataSet 和 DataAdapter 結(jié)合的備選。這個(gè)對(duì)象提供了對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)記錄的定向的存取。這些對(duì)象只適合只讀存取,例如填充一個(gè)列表然后斷開(kāi)連接。

DbCommand 和 DbConnection 對(duì)象

DbConnection 對(duì)象代表了數(shù)據(jù)源的連接。這種連接可以在不同的命令對(duì)象間共享。
DbCommand 對(duì)象代表了從檢索或操縱數(shù)據(jù)發(fā)送到數(shù)據(jù)庫(kù)的命令或者或者一個(gè)儲(chǔ)存的進(jìn)程。

例子

目前為止,我們已經(jīng)應(yīng)用了我們電腦中的表和數(shù)據(jù)庫(kù)。在本案例中,我們將創(chuàng)建一個(gè)表,添加欄目,行和數(shù)據(jù),并且用 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);
      }
   }
}

當(dāng)你執(zhí)行程序時(shí),觀察以下幾方面:

  • 程序首先創(chuàng)建應(yīng)一個(gè)數(shù)據(jù)集合然后用 GridView 控件的 DataBind() 方法約束它。
  • Createdataset() 方法是用戶(hù)定義功能,它可以創(chuàng)建一個(gè)新的 DataSet 對(duì)象并且調(diào)用其他的用戶(hù)定義的 CreateStudentTable() 方法來(lái)創(chuàng)建表格然后將他們添加到數(shù)據(jù)集合的表集合中。
  • CreateStudentTable() 方法調(diào)用用戶(hù)定義的 AddNewColumn() 和 AddNewRow() 方法來(lái)創(chuàng)建表的欄目和行同時(shí)向行中添加數(shù)據(jù)。
    當(dāng)頁(yè)面得到執(zhí)行,它返回的表的行如下圖所示:

http://wiki.jikexueyuan.com/project/asp-net/images/ado.net_result.jpg" alt="" />

上一篇:Ajax 控制下一篇:文件上傳