11.4 DataSet对象
知识点讲解:光盘:视频\PPT讲解(知识点)\第11章\DataSet对象.mp4
DataSet对象是ADO.NET中断开式和分布式数据方案的核心对象。DataSet是数据的内存驻留表示形式,它可以用于多种不同的数据源,也可以用于XML数据,或用于管理应用程序本地的数据。DataSet表示包括相关表、约束和表间关系在内的整个数据集。本节将详细讲解DataSet对象的基本知识。
11.4.1 DataSet概述
DataSet是ADO.NET的核心组件之一,也是各种基于.NET平台程序语言开发数据库应用程序最常接触的类。DataSet在ADO.NET实现从数据库抽取数据中起到关键作用,因为在从数据库完成数据抽取后,它是各种数据源中的数据在计算机内存中映射成的缓存,所以通常称DataSet为一个数据容器。也有人把DataSet称为内存中的数据库,因为在DataSet中可以包含很多数据表以及这些数据表之间的关系。此外,DataSet在客户端实现读取、更新数据库等过程中起到了中间部件的作用。
DataSet从数据源中获取数据以后就断开了与数据源之间的连接。允许在DataSet中定义数据约束和表关系,增加、删除和编辑记录,还可以对DataSet中的数据进行查询、统计等。当完成了各项操作以后,还可以把DataSet中的数据送回数据源。
创建DataSet的语法格式如下。
DataSet dataSet = new DataSet();
在上述语法格式中,首先建立了一个空的数据集,然后再把建立的数据表放到该数据集里。
另外,也可以通过如下语法格式创建DataSet。
DataSet dataSet = new DataSet("表名");
在上述语法格式中。首先建立的是数据表,然后再建立包含数据表的数据集。
DataSet里包含几种类,以用于数据操作,并且为了方便对DataSet对象的操作,DataSet还提供了一系列的属性和方法。DataSet属性的具体信息如表11-12所示。
表11-12 DataSet属性信息
属 性 |
说 明 |
---|---|
CaseSensitive |
获取或设置一个值,该值指示DataTable对象中的字符串比较是否区分大小写 |
DataSetName |
获取或设置当前DataSet的名称 |
DefaultViewManager |
获取DataSet所包含的数据的自定义视图,以允许使用自定义的DataViewManager进行筛选、搜索和导航 |
EnforceConstraints |
获取或设置一个值,该值指示在尝试执行任何更新操作时是否遵循约束规则 |
ExtendedProperties |
获取与DataSet相关的自定义用户信息的集合 |
HasErrors |
获取一个值,指示在此DataSet中的任何DataTable对象是否存在错误 |
Prefix |
获取或设置一个XML前缀,该前缀是DataSet的命名空间的别名 |
Relations |
获取用于将表链接起来并允许从父表浏览到子表的关系的集合 |
Tables |
获取包含在DataSet中的表的集合 |
DataSet方法的具体信息如表11-13所示。
表11-13 DataSet方法信息
方 法 |
说 明 |
---|---|
Clear |
通过移除所有表中的所有行来清除任何数据的DataSet |
Copy |
复制该DataSet的结构和数据 |
GetXml |
返回存储在DataSet中的数据的XML表示形式 |
GetXmlSchema |
返回存储在DataSet中的数据的XML表示形式的XML架构 |
HasChanges |
获取一个值,该值指示DataSet是否有更改,包括新增行、已删除的行或已修改的行 |
Merge |
将指定的DataSet、DataTable或DataRow对象的数组合并到当前的DataSet或DataTable中 |
ReadXml |
将XML架构和数据读入DataSet |
ReadXmlSchema |
将XML架构读入DataSet |
WriteXml |
从DataSet写XML数据,还可以选择写架构 |
WriteXmlSchema |
写XML架构形式的DataSet结构 |
DataSet集合中常用的类有如下4个。
1.DataTable
DataTable被称为数据表,用来存储数据。一个DataSet可以包含多个DataTable,每个DataTable又可以包含多个行(DataRow)和列(DataColumn)。创建DataTable的方式有如下两种。
(1)当数据加载至DataSet时,会自动创建一些DataTable。
(2)以编程方式创建DataTable的对象,然后将这个对象添加到DataSet的Tables集合中。
从DataSet中提取DataTable的语法格式如下。
DataTable dataTable = dataset.数据表名;
其中,“dataset”是DataSet对象,“dataTable”是DataTable对象。
DataTable类中有很多常用的属性和方法,各属性的具体说明如表11-14所示。
表11-14 DataTable类属性信息
属 性 |
说 明 |
---|---|
CaseSensitive |
获取或设置一个值,该值指示DataTable对象中的字符串比较是否区分大小写 |
ChildRelations |
获取此DataTable的子关系的集合 |
Columns |
获取属于该表的列的集合 |
Constraints |
获取或设置一个值,该值指示获取由该表维护的约束的集合 |
DataSet |
获取此表所属的DataSet |
DefaultView |
获取可能包括筛选视图或游标位置的表的自定义视图 |
DisplayExpression |
获取或设置一个XML前缀,该前缀是DataSet的命名空间的别名 |
ExtendedProperties |
获取自定义用户信息的集合 |
HasErrors |
获取一个值,该值指示该表所属的DataSet的任何表的任何行中是否有错误 |
ParentRelations |
获取该DataTable的父关系的集合 |
PrimaryKey |
获取或设置充当数据表主键的列的数组 |
Rows |
获取属于该表的行的集合 |
TableName |
获取或设置DataTable的名称 |
DataTable类方法的具体信息如表11-15所示。
表11-15 DataTable类方法信息
方 法 |
说 明 |
---|---|
Clear |
清除所有数据的DataTable |
Compute |
计算用来传递筛选条件的当前行上的给定表达式 |
Copy |
复制该DataTable的结构和数据 |
ImportRow |
将DataRow复制到DataTable中,保留任何属性设置以及初始值和当前值 |
LoadDataRow |
查找和更新特定行。如果找不到任何匹配行,则使用给定值创建新行 |
Merge |
将指定的DataTable与当前的DataTable合并 |
NewRow |
创建与该表具有相同架构的新DataRow |
ReadXml |
将XML架构和数据读入DataTable |
Select |
获取DataRow对象的数组 |
WriteXml |
将DataTable的当前内容以XML格式写入 |
WriteXmlSchema |
将DataTable的当前数据结构以XML架构形式写入 |
2.DataRow
DataRow是给定DataTable(数据表)中的一行数据,或者说是一条记录。DataRow对象的方法提供了对表中数据的插入、删除、更新和查询等功能。提取数据表中的行的语法格式如下。
DataRow dataRow = dataTable.Row[n];
其中,“DataRow”代表数据行类;“dataRow”是DataRow的实例;“dataTable”表示数据表的表实例;“n”是数据表中行的索引(从0开始)。
DataRow类也提供了很多属性和方法,各属性的具体信息如表11-16所示。
表11-16 DataRow类属性信息
属 性 |
说 明 |
---|---|
Item |
获取或设置存储在指定列中的数据 |
ItemArray |
通过一个数组来获取或设置此行的所有值 |
Table |
获取该行拥有其架构的DataTable |
DataRow类方法的具体信息如表11-17所示。
表11-17 DataRow类方法信息
方 法 |
说 明 |
---|---|
Delete |
清除所有数据的DataTable |
GetChildRows |
计算用来传递筛选条件的当前行上的给定表达式 |
IsNull |
获取一个指定的列是否包含空值的值 |
3.DataColumn
DataColumn是数据表中的数据列,定义了表的数据结构。如果要获取某列的值,需要在数据行的基础上进行操作。具体的语法格式如下。
string str = dataRow.Column["字段名"],ToString();
也可以使用如下语法格式。
string str = dataRow.Column[索引],ToString()
DataColumn类也提供了很多属性和方法,各属性的具体信息如表11-18所示。
表11-18 DataColumn类属性信息
属 性 |
说 明 |
---|---|
Caption |
获取此DataTable的子关系的集合 |
ColumnName |
获取属于该表的列的集合 |
DefaultValue |
获取或设置一个值,该值指示获取由该表维护的约束的集合 |
Table |
获取此表所属的DataSet |
DataColumn类方法的具体信息如表11-19所示。
表11-19 DataColumn方法信息
方 法 |
说 明 |
---|---|
SetOrdinal |
将DataColumn的序号或位置更改为指定的序号或位置 |
4.DataRelation
通过使用DataRelation,可以使用DataColumn对象将两个DataTable对象相互关联。例如,在“会员/订单”关系中,会员表是关系的父表,订单表是子表。此关系类似于关系数据库中的主键/外键关系。关系是在父表和子表中的匹配的列之间创建的,两个列的数据类型必须相同。
在创建DataRelation时,它首先验证是否可以建立关系。在将它添加到DataRelationCollection之后,它将禁止使此关系无效的任何更改,以维持此关系。在创建DataRelation和将其添加到DataRelationCollection之间的这段时间,可以对父行或子行进行其他更改。如果这样会使关系不再有效,则会产生异常。
DataRelation类的常用属性信息如表11-20所示。
表11-20 DataRelation类属性信息
属 性 |
说 明 |
---|---|
ChildColumns |
获取此关系的子DataColumn对象 |
ChildKeyConstraint |
获取关系的外键约束 |
ChildTable |
获取此关系的子表 |
DataSet |
获取DataRelation所属的DataSet |
ExtendedProperties |
获取存储自定义属性的集合 |
ParentColumns |
获取作为此DataRelation的父列的DataColumn对象的数组 |
ParentKeyConstraint |
获取聚集约束,它确保DataRelation父列中的值是唯一的 |
ParentTable |
获取此DataRelation的父级DataTable |
RelationName |
获取或设置用于从DataRelationCollection中检索 DataRelation 的名称 |
11.4.2 使用DataSet
本节将通过一个具体的实例来说明DataSet独特的使用方法。
实例062 获取数据库中指定表的所有内容
源码路径 光盘\daima\11\DataSet\ 视频路径 光盘\视频\实例\第11章\062
本实例的功能是通过DataSet获取SQL Server中“duixiang”数据库中表“ziliao”的所有内容。数据库名为“duixiang”,由表“ziliao”构成。表“ziliao”的具体设计结构如表11-21所示。
表11-21 表“ziliao”的设计结构
字 段 名 称 |
数 据 类 型 |
是否是主键 |
默 认 值 |
功 能 描 述 |
---|---|---|---|---|
id |
int |
是 |
递增1 |
编号 |
name |
char |
否 |
null |
名字 |
dianhua |
char |
否 |
null |
电话 |
Address |
char |
否 |
null |
地址 |
本实例的具体实现过程如下。
(1)Visual Studio 2012中新创建一个名为“DataSet”的网站项目。
(2)在自动生成的Default.aspx.cs文件中,设置其Page_Load事件读取数据并保存到DataSet中,然后从DataTable中输出所有字段。具体实现代码如下。
protected void Page_Load(object sender, EventArgs e)
{
//连接字符串
String sqlconn = "Data Source=(local);Initial Catalog=DataSet;Integrated Security=True;User ID =sa;Password =888888";
SqlConnection myConnection = new SqlConnection(sqlconn);
//打开数据库连接
myConnection.Open();
//读取数据
SqlDataAdapter da = new SqlDataAdapter("select * from Products", myConnection);
DataTable myTable = new DataTable();
da.Fill(myTable);
Response.Write("<table>");
//显示列名字
Response.Write("<tr bgcolor=#|DAB4B4>");
foreach (DataColumn myColumn in myTable.Columns)
{
Response.Write("<td>" + myColumn.ColumnName + "</td>");
}
Response.Write("</tr>");
//输出所有的字段值
foreach (DataRow myRow in myTable.Rows)
{
Response.Write("<tr>");
foreach (DataColumn myColumn in myTable.Columns)
{
Response.Write("<td>" + myRow[myColumn] + "</td>");
}
Response.Write("</tr>");
}
Response.Write("</table>");
//关闭与数据库的连接
myConnection.Close();
}
范例123:插入多记录
源码路径:光盘\演练范例\123视频路径:光盘\演练范例\123范例124:更新员工信息
源码路径:光盘\演练范例\124视频路径:光盘\演练范例\124\
上述代码执行后,将在页面中输出Products表中的所有数据,如图11-15所示。
图11-15 执行效果
共有条评论 网友评论