ASP.NET - 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 | 获取或设置为 DataSet 的命名空间别名的 XML 前缀。 |
| Relations | 返回 DataRelation 对象的集合。 |
| Tables | 返回DataTable对象的集合。 |
下表显示了DataSet类的一些重要方法:
| 方法 | 描述 |
|---|---|
| AcceptChanges | 接受自加载数据集或调用此方法以来所做的所有更改。 |
| BeginInit | 开始数据集的初始化。 初始化发生在运行时。 |
| Clear | 清除数据。 |
| Clone | 复制 DataSet 的结构,包括所有 DataTable 架构、关系和约束。 不复制任何数据。 |
| Copy | 复制结构和数据。 |
| CreateDataReader() | 返回一个 DataTableReader,其中每个 DataTable 一个结果集,其顺序与 Tables 集合中的表出现的顺序相同。 |
| CreateDataReader(DataTable[]) | 返回一个 DataTableReader,其中每个 DataTable 一个结果集。 |
| EndInit | 结束数据集的初始化。 |
| Equals(Object) | 判断指定的Object是否等于当前的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 | 检查数据集序列化表示的格式。 |
| Load(IDataReader, LoadOption, DataTable[]) | 使用提供的 IDataReader 使用数据源中的值填充 DataSet,并使用 DataTable 实例数组来提供架构和命名空间信息。 |
| Load(IDataReader, LoadOption, String[]) | 使用提供的 IDataReader 使用数据源中的值填充 DataSet,并使用字符串数组提供 DataSet 中表的名称。 |
| Merge() | 将数据与另一个数据集中的数据合并。 该方法有不同的重载形式。 |
| ReadXML() | 将 XML 架构和数据读入 DataSet。 该方法有不同的重载形式。 |
| ReadXMLSchema(0) | 将 XML 架构读入数据集中。 该方法有不同的重载形式。 |
| RejectChanges | 回滚自上次调用 AcceptChanges 以来所做的所有更改。 |
| WriteXML() | 从数据集中写入 XML 架构和数据。 该方法有不同的重载形式。 |
| WriteXMLSchema() | 将 DataSet 的结构写入 XML 模式。 该方法有不同的重载形式。 |
DataTable 类
DataTable 类代表数据库中的表。 它具有以下重要特性; 除 PrimaryKey 属性外,大多数属性都是只读属性:
| 属性 | 描述 |
|---|---|
| ChildRelations | 返回子关系集合。 |
| Columns | 返回Columns集合。 |
| Constraints | 返回约束集合。 |
| DataSet | 返回父数据集。 |
| DefaultView | 返回表的视图。 |
| ParentRelations | 返回 ParentRelations 集合。 |
| PrimaryKey | 获取或设置列数组作为表的主键。 |
| Rows | 返回 Rows 集合。 |
下表显示了DataTable类的一些重要方法:
| 方法 | 描述 |
|---|---|
| AcceptChanges | 提交自上次 AcceptChanges 以来的所有更改。 |
| Clear | 清除表中的所有数据。 |
| GetChanges | 返回 DataTable 的副本,其中包含自调用 AcceptChanges 方法以来所做的所有更改。 |
| GetErrors | 返回有错误的行数组。 |
| ImportRows | 将新行复制到表中。 |
| LoadDataRow | 查找并更新特定行,或者创建新行(如果未找到)。 |
| Merge | 将表与另一个数据表合并。 |
| NewRow | 创建一个新的 DataRow。 |
| RejectChanges | 回滚自上次调用 AcceptChanges 以来所做的所有更改。 |
| Reset | 将表格重置为其原始状态。 |
| Select | 返回 DataRow 对象的数组。 |
DataRow 类
DataRow 对象表示表中的一行。 它具有以下重要属性:
| 属性 | 描述 |
|---|---|
| HasErrors | 指示是否有任何错误。 |
| Items | 获取或设置存储在特定列中的数据。 |
| ItemArrays | 获取或设置该行的所有值。 |
| Table | 返回父表。 |
下表显示了 DataRow 类的一些重要方法:
| 方法 | 描述 |
|---|---|
| AcceptChanges | 接受自调用此方法以来所做的所有更改。 |
| BeginEdit | 开始编辑操作。 |
| CancelEdit | 取消编辑操作。 |
| Delete | 删除 DataRow。 |
| EndEdit | 结束编辑操作。 |
| GetChildRows | 获取该行的子行。 |
| GetParentRow | 获取父行。 |
| GetParentRows | 获取DataRow对象的父行。 |
| RejectChanges | 回滚自上次调用 AcceptChanges 以来所做的所有更改。 |
DataAdapter 对象
DataAdapter 对象充当 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()
{
//为表创建 DataSet 对象
DataSet dataset = new DataSet();
// 创建Students表
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));
}
//将数据添加到表中
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() 来创建表的列和行,并向行添加数据。
当页面执行时,它返回表的行,如下所示:

