ASP.NET ADO.NET

2022-06-27 15:38 更新

ADO.NET

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

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

DataSet 類

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

下表是 DataSet 類的一些重要屬性:

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

下表列出來 DataSet 類的一些重要方法:

方法描述
AcceptChanges接受所有由于裝載 DataSet 或者這個(gè)方法的更改。
BeginInit開始 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 的副本,該副本包含自加載以來或自上次調(diào)用 AcceptChanges 以來對(duì)該數(shù)據(jù)集進(jìn)行的所有更改。
GetChanges(DataRowState)獲取由 DataRowState 篩選的 DataSet 的副本,該副本包含上次加載以來或調(diào)用 AcceptChanges 以來對(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 中的表提供名稱,從而用來自數(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 以來或上次調(diào)用 DataSet.AcceptChanges 以來對(duì)其進(jìn)行的所有更改。
WriteXML()從 DataSet 寫 XML 數(shù)據(jù)和架構(gòu)。這種方法有不同的重載形式。
WriteXMLSchema()從 DataSet 寫 XML 架構(gòu)。這種方法有不同的重載形式。

DataTable 類

DataTable 類代表了數(shù)據(jù)庫中的表。它有如下的重要屬性:大多數(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 類的重要方法:

方法描述
AcceptChanges提交自加載此 DataSet 或上次調(diào)用 AcceptChanges 以來對(duì)其進(jìn)行的所有更改。
Clear通過移除所有表中的所有行來清除任何數(shù)據(jù)的 DataSet。
GetChanges獲取 DataSet 的副本,該副本包含自上次加載以來或自調(diào)用 AcceptChanges 以來對(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回滾自該表加載以來或上次調(diào)用 AcceptChanges 以來對(duì)該表進(jìn)行的所有更改。
Reset清除所有表并從 DataSet 中刪除所有關(guān)系、外部約束和表。 子類應(yīng)重寫 Reset,以便將 DataSet 還原到其原始狀態(tài)。
Select獲取 DataRow 對(duì)象的數(shù)組。

DataRow 類

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

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

下表列示了 DataRow 類的重要方法:

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

DataAdapter 對(duì)象

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

DataReader 對(duì)象

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

DbCommand 和 DbConnection 對(duì)象

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

例子

目前為止,我們已經(jīng)應(yīng)用了我們電腦中的表和數(shù)據(jù)庫。在本案例中,我們將創(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() 方法是用戶定義功能,它可以創(chuàng)建一個(gè)新的 DataSet 對(duì)象并且調(diào)用其他的用戶定義的 CreateStudentTable() 方法來創(chuàng)建表格然后將他們添加到數(shù)據(jù)集合的表集合中。
  • CreateStudentTable() 方法調(diào)用用戶定義的 AddNewColumn() 和 AddNewRow() 方法來創(chuàng)建表的欄目和行同時(shí)向行中添加數(shù)據(jù)。
    當(dāng)頁面得到執(zhí)行,它返回的表的行如下圖所示:

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)