-

ADO.NET

ADO.NET 提供了前端控件和后端数据库之间的桥梁。ADO.NET 对象封装了与数据显示对象相互作用的所有的数据存取操作和控件。因此便隐藏了数据移动的细节。

下列图表整体展示了 ADO.NET 对象:

DataSet 类

数据集代表了数据库的一个子集。它和数据库没有持续的连接。为了升级数据库需要进行重新连接。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 类

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 类

DataRow 对象代表了表中的一行,它有如下的重要属性:

属性描述
HasErrors表明是否有错误。
Items获取或者设置存储在特定栏目的数据。
ItemArrays获取或者设置本行中所有的值。
Table返回父表。

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

方法描述
AcceptChanges应用调用该方法后的所有更改。
BeginEdit开始编辑操作。
CancelEdit取消编辑操作。
Delete删除数据行。
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() 方法来创建表格然后将他们添加到数据集合的表集合中。
  • CreateStudentTable() 方法调用用户定义的 AddNewColumn() 和 AddNewRow() 方法来创建表的栏目和行同时向行中添加数据。
    当页面得到执行,它返回的表的行如下图所示: