ADO.NET


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

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

ADO.Net objects

数据集类


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

下表显示了 DataSet 类的一些重要属性:

特性 描述
区分大小写 指示数据表中的字符串比较是否区分大小写。
容器 获取组件的容器。
数据集名称 获取或设置当前数据集的名称。
默认视图管理器 返回数据集中数据的视图。
设计模式 指示组件当前是否处于设计模式。
强制约束 指示尝试任何更新操作时是否遵循约束规则。
Events 获取附加到此组件的事件处理程序的列表。
扩展属性 获取与 DataSet 关联的自定义用户信息的集合。
有错误 指示是否有任何错误。
已初始化 指示 DataSet 是否已初始化。
Locale 获取或设置用于比较表中字符串的语言环境信息。
命名空间 获取或设置 DataSet 的命名空间。
Prefix 获取或设置为 DataSet 的命名空间命名的 XML 前缀。
关系 返回 DataRelation 对象的集合。
Tables 返回 DataTable 对象的集合。

下表显示了 DataSet 类的一些重要方法:

Methods 描述
接受更改 接受自加载数据集或调用此方法以来所做的所有更改。
开始初始化 开始数据集的初始化。初始化发生在运行时。
Clear 清除数据。
Clone 复制 DataSet 的结构,包括所有 DataTable 架构、关系和约束。不复制任何数据。
Copy 复制结构和数据。
创建数据读取器() 返回一个 DataTableReader,每个 DataTable 有一个结果集,其顺序与 Tables 集合中的表显示顺序相同。
CreateDataReader(DataTable[]) 返回一个 DataTableReader,每个 DataTable 有一个结果集。
EndInit 结束数据集的初始化。
等于(对象) 确定指定的 Object 是否等于当前的 Object。
Finalize 释放资源并执行其他清理。
获取更改 返回 DataSet 的副本,其中包含自加载或调用 AcceptChanges 方法以来所做的所有更改。
GetChanges(数据行状态) 获取 DataSet 的副本,其中包含自加载或调用 AcceptChanges 方法以来所做的所有更改,由 DataRowState 过滤。
获取数据集架构 获取 DataSet 的 XmlSchemaSet 的副本。
获取对象数据 使用序列化 DataSet 所需的数据填充序列化信息对象。
GetType 获取当前实例的类型。
GetXML 返回数据的 XML 表示。
获取XMLSchema 返回数据的 XML 表示形式的 XSD 架构。
有变化() 获取一个值,该值指示 DataSet 是否有更改,包括新的、删除的或修改的行。
HasChanges(DataRowState) 获取一个值,该值指示 DataSet 是否具有由 DataRowState 筛选的更改,包括新行、删除行或修改行。
IsBinarySerialized 检查 DataSet 的序列化表示的格式。
加载(IDataReader,LoadOption,DataTable[]) 使用提供的 IDataReader 使用数据源中的值填充 DataSet,使用 DataTable 实例数组来提供架构和命名空间信息。
加载(IDataReader,LoadOption,字符串 []) 使用提供的 IDataReader 使用来自数据源的值填充 DataSet,使用字符串数组为 DataSet 中的表提供名称。
Merge() 将数据与来自另一个 DataSet 的数据合并。此方法具有不同的重载形式。
读取XML() 将 XML 架构和数据读入 DataSet。此方法具有不同的重载形式。
读取XMLSchema(0) 将 XML 架构读入 DataSet。此方法具有不同的重载形式。
拒绝更改 回滚自上次调用 AcceptChanges 以来所做的所有更改。
写XML() 从 DataSet 写入 XML 架构和数据。此方法具有不同的重载形式。
写XMLSchema() 将 DataSet 的结构写入 XML 架构。此方法具有不同的重载形式。

数据表类


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

特性 描述
子女关系 返回子关系的集合。
Columns 返回列集合。
约束 返回约束集合。
DataSet 返回父数据集。
默认视图 返回表的视图。
父母关系 返回 ParentRelations 集合。
首要的关键 获取或设置一个列数组作为表的主键。
Rows 返回行集合。

下表显示了 DataTable 类的一些重要方法:

Methods 描述
接受更改 提交自上次 AcceptChanges 以来的所有更改。
Clear 清除表中的所有数据。
获取更改 返回 DataTable 的副本,其中包含自调用 AcceptChanges 方法以来所做的所有更改。
获取错误 返回有错误的行数组。
导入行 将新行复制到表中。
加载数据行 查找并更新特定行,或创建新行(如果未找到)。
Merge 将表与另一个 DataTable 合并。
NewRow 创建一个新的 DataRow。
拒绝更改 回滚自上次调用 AcceptChanges 以来所做的所有更改。
Reset 将表重置为其原始状态。
Select 返回 DataRow 对象的数组。

数据行类


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

特性 描述
有错误 指示是否有任何错误。
Items 获取或设置存储在特定列中的数据。
项目数组 获取或设置行的所有值。
Table 返回父表。

下表显示了 DataRow 类的一些重要方法:

Methods 描述
接受更改 接受自调用此方法以来所做的所有更改。
开始编辑 开始编辑操作。
取消编辑 取消编辑操作。
Delete 删除数据行。
EndEdit 结束编辑操作。
GetChildRows 获取该行的子行。
获取父行 获取父行。
获取父行 获取 DataRow 对象的父行。
拒绝更改 回滚自上次调用 AcceptChanges 以来所做的所有更改。

数据适配器对象


DataAdapter 对象充当 DataSet 对象和数据库之间的中介。这有助于数据集包含来自多个数据库或其他数据源的数据。

数据读取器对象


DataReader 对象是 DataSet 和 DataAdapter 组合的替代方案。该对象提供对数据库中数据记录的面向连接的访问​​。这些对象适用于只读访问,例如填充列表然后断开连接。

DbCommand 和 DbConnection 对象


DbConnection 对象表示与数据源的连接。连接可以在不同的命令对象之间共享。

DbCommand 对象表示从检索或操作数据发送到数据库的命令或存储过程。

例子


到目前为止,我们已经使用了我们计算机中已经存在的表和数据库。在此示例中,我们将创建一个表,将列、行和数据添加到其中,并使用 GridView 对象显示该表。

源文件代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="createdatabase._Default" %>

<!DOCTYPE html PUBLIC "-// W3C

<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()
        {
            // 为表创建一个 DataSet 对象
            DataSet dataset = new DataSet();

            // 创建学生表
            DataTable Students = CreateStudentTable();
            dataset.Tables.Add(Students);
            return dataset;
        }
      
        private DataTable CreateStudentTable()
        {
            DataTable Students = new DataTable("Student");

            // 添加列
            AddNewColumn(Students, "System.Int32", "StudentID");
            AddNewColumn(Students, "System.String", "StudentName");
            AddNewColumn(Students, "System.String", "StudentCity");

            // 添加行
            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));
        }

        // 向表中添加数据
        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() 来创建表的列和行以及向行添加数据。

当页面被执行时,它返回表格的行,如下所示:

ADO.Net Result