ADO.NET
ADO.NET 提供了前端控件和后端数据库之间的桥梁。 ADO.NET 对象封装了所有的数据访问操作,控件与这些对象交互以显示数据,从而隐藏了数据移动的细节。
下图一目了然地展示了 ADO.NET 对象:
数据集类
数据集代表数据库的一个子集。它没有与数据库的持续连接。要更新数据库,需要重新连接。 DataSet 包含 DataTable 对象和 DataRelation 对象。 DataRelation 对象表示两个表之间的关系。
下表显示了 DataSet 类的一些重要属性:
属性 |
说明 |
CaseSensitive |
指示数据表中的字符串比较是否区分大小写。 |
Container |
获取组件的容器。 |
DataSetName |
获取或设置当前数据集的名称。 |
DefaultViewManager |
返回数据集中的数据视图。 |
DesignMode |
指示组件当前是否处于设计模式。 |
EnforceConstraints |
指示在尝试任何更新操作时是否遵循约束规则。 |
Events |
获取附加到此组件的事件处理程序列表。 |
ExtendedProperties |
获取与 DataSet 关联的自定义用户信息的集合。 |
HasErrors |
指示是否有任何错误。 |
IsInitialized |
表示DataSet是否初始化。 |
Locale |
获取或设置用于比较表中字符串的区域设置信息。 |
Namespace |
获取或设置数据集的命名空间。 |
Prefix |
获取或设置作为 DataSet 命名空间别名的 XML 前缀。 |
Relations |
返回 DataRelation 对象的集合。 |
Tables |
返回 DataTable 对象的集合。 |
下表显示了 DataSet 类的一些重要方法:
方法 |
说明 |
AcceptChanges |
接受自加载数据集或调用此方法以来所做的所有更改。 |
BeginInit |
开始数据集的初始化。初始化发生在运行时。 |
Clear |
清除数据。 |
Clone |
复制数据集的结构,包括所有数据表模式、关系和约束。不复制任何数据。 |
Copy |
复制结构和数据。 |
CreateDataReader() |
返回一个 DataTableReader,每个 DataTable 有一个结果集,顺序与 Tables 集合中的表相同。 |
CreateDataReader(DataTable[]) |
返回一个 DataTableReader,每个 DataTable 有一个结果集。 |
EndInit |
结束数据集的初始化。 |
Equals(Object) |
判断指定的Object是否等于当前的Object。 |
Finalize |
释放资源并执行其他清理工作。 |
GetChanges |
返回数据集的副本,其中包含自加载或调用 AcceptChanges 方法以来所做的所有更改。 |
GetChanges(DataRowState) |
获取数据集的副本,其中包含自加载或调用 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() |
将数据与来自另一个 DataSet 的数据合并。这个方法有不同的重载形式。 |
ReadXML() |
将 XML 架构和数据读入 DataSet。这个方法有不同的重载形式。 |
ReadXMLSchema(0) |
将 XML 架构读入数据集。这个方法有不同的重载形式。 |
RejectChanges |
回滚自上次调用 AcceptChanges 以来所做的所有更改。 |
WriteXML() |
从 DataSet 中写入 XML 架构和数据。这个方法有不同的重载形式。 |
WriteXMLSchema() |
将 DataSet 的结构写为 XML 模式。这个方法有不同的重载形式。 |
DataTable 类
DataTable 类表示数据库中的表。它具有以下重要特性;除了 PrimaryKey 属性外,这些属性中的大多数都是只读属性:
属性 |
说明 |
ChildRelations |
返回子关系的集合。 |
Columns |
返回列集合。 |
Constraints |
返回约束集合。 |
DataSet |
返回父数据集。 |
DefaultView |
返回表的视图。 |
ParentRelations |
返回 ParentRelations 集合。 |
PrimaryKey |
获取或设置一个列数组作为表的主键。 |
Rows |
返回 Rows 集合。 |
下表显示了 DataTable 类的一些重要方法:
方法 |
说明 |
AcceptChanges |
提交自上次 AcceptChanges 以来的所有更改。 |
Clear |
清除表中的所有数据。 |
GetChanges |
返回包含自调用 AcceptChanges 方法以来所做的所有更改的 DataTable 的副本。 |
GetErrors |
返回包含错误的行数组。 |
ImportRows |
将新行复制到表中。 |
LoadDataRow |
查找并更新特定行,或创建新行(如果未找到)。 |
Merge |
将表与另一个数据表合并。 |
NewRow |
创建一个新的 DataRow。 |
RejectChanges |
回滚自上次调用 AcceptChanges 以来所做的所有更改。 |
Reset |
将表重置为其原始状态。 |
Select |
返回一组 DataRow 对象。 |
DataRow 类
DataRow 对象代表表格中的一行。它具有以下重要属性:
属性 |
说明 |
HasErrors |
指示是否有任何错误。 |
Items |
获取或设置存储在特定列中的数据。 |
ItemArrays |
获取或设置行的所有值。 |
Table |
返回父表。 |
下表显示了 DataRow 类的一些重要方法:
方法 |
说明 |
AcceptChanges |
接受自调用此方法以来所做的所有更改。 |
BeginEdit |
开始编辑操作。 |
CancelEdit |
取消编辑操作。 |
Delete |
删除数据行。 |
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()
{
//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() 来创建表并将其添加到数据集的 Tables 集合中。
CreateStudentTable() 方法调用用户定义的方法 AddNewColumn() 和 AddNewRow() 来创建表的列和行以及向行添加数据。
当页面被执行时,它返回表中的行,如下所示:
