Asp.net 简明教程

ADO.NET

ADO.NET 在前端控件和后端数据库之间提供了桥梁。ADO.NET 对象封装了所有数据访问操作,而控件与这些对象交互,以显示数据,从而隐藏了数据移动的详细信息。

下图一目了然地显示了 ADO.NET 对象:

ado.net objects

The DataSet Class

数据集表示数据库的一个子集。它与数据库没有连续的连接。若要更新数据库,则需要重新连接。DataSet 包含 DataTable 对象和 DataRelation 对象。DataRelation 对象表示两个表之间的关系。

下表显示了 DataSet 类的若干重要属性:

Properties

Description

CaseSensitive

指示数据表内的字符串比较是否区分大小写。

Container

获取组件容器。

DataSetName

获取或设置当前数据集的名称。

DefaultViewManager

返回数据集中数据的视图。

DesignMode

指示组件是否当前处于设计模式。

EnforceConstraints

指示在尝试任何更新操作时是否遵循约束规则。

Events

获取附加到此组件的事件处理程序列表。

ExtendedProperties

获取与 DataSet 关联的自定义用户信息集合。

HasErrors

指示是否有任何错误。

IsInitialized

指示 DataSet 是否已初始化。

Locale

获取或设置用于比较表内字符串的区域设置信息。

Namespace

获取或设置 DataSet 的命名空间。

Prefix

获取或设置别名 DataSet 命名空间的 XML 前缀。

Relations

返回 DataRelation 对象集合。

Tables

返回 DataTable 对象集合。

下表显示了 DataSet 类的若干重要方法:

Methods

Description

AcceptChanges

接受自 DataSet 加载或此方法被调用以来所做的所有更改。

BeginInit

开始初始化 DataSet。初始化将在运行时发生。

Clear

Clears data.

Clone

复制 DataSet 的结构,包括所有 DataTable 架构、关系和约束。不复制任何数据。

Copy

复制结构和数据。

CreateDataReader()

返回一个 DataTableReader,每个 DataTable 有一个结果集,顺序与表出现在 Tables 集合中的顺序相同。

CreateDataReader(DataTable[])

返回一个 DataTableReader,每个 DataTable 有一个结果集。

EndInit

结束数据集的初始化。

Equals(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()

写入 XML 架构和数据以从 DataSet 中。此方法有不同的重载形式。

WriteXMLSchema()

以 XML 架构的形式写入 DataSet 的结构。此方法有不同的重载形式。

The DataTable Class

DataTable 类表示数据库中的表。它有以下重要属性;这些属性大多是只读属性,除了 PrimaryKey 属性:

Properties

Description

ChildRelations

返回子关系集合。

Columns

Returns the Columns collection.

Constraints

Returns the Constraints collection.

DataSet

Returns the parent DataSet.

DefaultView

返回表视图。

ParentRelations

Returns the ParentRelations collection.

PrimaryKey

获取或设置一组列作为表的唯一键。

Rows

Returns the Rows collection.

下表显示了 DataTable 类的部分重要方法:

Methods

Description

AcceptChanges

提交自最后一次 AcceptChanges 以来所做的所有更改。

Clear

清除表中的所有数据。

GetChanges

返回一个 DataTable 副本,其中包含自调用 AcceptChanges 方法以来所做的所有更改。

GetErrors

返回一个带有错误的行数组。

ImportRows

将新行复制到表中。

LoadDataRow

查找并更新特定行,或创建新行,如果找不到。

Merge

将表与其他 DataTable 合并。

NewRow

Creates a new DataRow.

RejectChanges

回滚自最后一次调用 AcceptChanges 以来所做的所有更改。

Reset

将表重置为其原始状态。

Select

返回一个 DataRow 对象数组。

The DataRow Class

DataRow 对象表示表中的一行。它具有以下重要属性:

Properties

Description

HasErrors

指示是否有任何错误。

Items

获取或设置存储在特定列中的数据。

ItemArrays

获取或设置行的所有值。

Table

Returns the parent table.

下表显示了 DataRow 类的部分重要方法:

Methods

Description

AcceptChanges

接受此方法调用后做出的所有更改。

BeginEdit

Begins edit operation.

CancelEdit

Cancels edit operation.

Delete

Deletes the DataRow.

EndEdit

Ends the edit operation.

GetChildRows

获取此行的子行。

GetParentRow

Gets the parent row.

GetParentRows

获取 DataRow 对象的父行。

RejectChanges

回滚自最后一次调用 AcceptChanges 以来所做的所有更改。

The DataAdapter Object

DataAdapter 对象充当数据集对象和数据库之间的中介。这让数据集能够包含来自多个数据库或其他数据源的数据。

The DataReader Object

DataReader 对象是 DataSet 和 DataAdapter 组合的备选方案。此对象提供面向连接的数据库中数据记录的访问。这些对象适合于只读访问,比如填充一个列表然后断开连接。

DbCommand and DbConnection Objects

DbConnection 对象表示与数据源的连接。该连接可由不同的命令对象共享。

DbCommand 对象表示发送至数据库的命令或存储过程,用于检索或处理数据。

Example

到目前为止,我们已经使用了计算机中已存在的表和数据库。在本例中,我们将创建表、向其中添加列、行和数据,并使用 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);
      }
   }
}

执行程序时,观察以下内容:

  1. 该应用程序首先创建一个数据集,并使用 GridView 控件的 DataBind() 方法将其绑定到网格视图控件。

  2. Createdataset() 方法是一个用户自定义函数,它创建一个新的 DataSet 对象,然后调用另一个用户自定义方法 CreateStudentTable() 来创建表并将其添加到数据集的 Tables 集合。

  3. CreateStudentTable() 方法调用用户自定义方法 AddNewColumn() 和 AddNewRow() 来创建表的列和行,以及向行中添加数据。

执行该页面时,它返回如下图所示的表的行:

ado.net result