DataSet 组件

来源:互联网 发布:淘宝免费推广有哪些 编辑:程序博客网 时间:2024/05/22 10:34
1.4  用于数据库访问的组件—— DataSet组件
DataSet是核心的.NET数据库访问组件,主要是用来支持ADO .NET的不连贯连接及分布数据的。它是数据的内存驻留代表,可以保证和数据源无关的一致的关系模型,可以用于多个、不同的数据源。本节的内容将介绍DataSet组件的构成以及该组件所包含的常用对象。
1.4.1  DataSet组件构成
DataSet组件模型的结构如图1-3所示。DataSet组件的一个重要组成部分是DataTabe对象集合(DataTableCollection),可以通过它的Table属性访问各个表,而其他的元素都是可选的。通过DataRelation对象可以建立表之间的关系,DataRelation对象存在于DataRelationCollection对象中。通过这些关系,可以在表结构之间进行浏览。ExtendedProperties对象用来存储一些用户自定义的信息。
图1-3  DataSet组件结构
DataSet对象可以将数据和表写成XML文档。数据和表可以通过HTTP传输被支持XML的平台上任何应用程序使用。通过WriteXmlSchema方法可以将表保存成XML表,通过WriteXml方法可以保存表和数据。使用ReadXml方法,可以读取XML文档,包括表和数据。
1.4.2  DataTable对象集合
DataTable是ADO .NET库中的一个重要的对象。使用它的对象除了DataSet外,还有DataView。DataTable对象有时候是区分大小的。例如:如果一个DataTable对象的名称是mydatatable,而另一个是Mydatatable,那么,在查找这些表中的某一个表时,认为是区分大小写的;如果mydatatable存在,而Mydatatable不存在,则查找字符串认为是不区分大小写的。
创建一个DataTable对象,可以直接使用DataTable的构造函数,或者使用DataSet组件的Table属性的Add方法,但是需要传递构造参数。此外,也可以在DataSet组件内部,使用DataAdapter对象的Fill和FillSchema方法来创建一个DataTable对象,或者使用ReadXml方法和ReadXmlSchema方法从一个预定义或者生成的XML表格来创建,或者使用DataSet的InferXmlSchema方法。
当创建了一个DataTable对象时,需要为TableName属性提供一个值;可以在任何时候指定该属性的值,或者也可以将它置为空。但是将没有TableName属性值的表添加到一个DataSet对象中时,表将给出一个递增的默认名称,该名称以“表”开始,例如“表0”。建议在设置TableName的属性值时,避免使用“表”和“表N”这种命名习惯。因为这样命名的表名可能会和DataSet对象中已经存在的一个默认表名发生冲突。如果发生这种冲突,将会引发异常。
当第一次创建了一个DataTable对象后,它并不包含任何表结构。为了定义该表的表结构,必须添加DataColumn对象到表的Columns集合中。可以指定其中一个Column项为主键,或者创建和添加Constraint(约束条件)对象到Constraints集合中。Columns集合和Constraints集合共同定义了DataTable对象的表结构。
如何在表内部创建DataColumn对象。可以使用DataColumn对象的构造函数,或者调用DataTable对象的Columns(DataColumnCollection类型)成员的Add方法。Add方法接收3个可选参数:ColumnName、DataType和Expression,以此创建一个新的DataColumn对象作为Columns集合的成员;此外,也可以将一个已经存在的DataColun对象作为该方法的参数,将直接把它添加到Columns集合中。如果需要,它返回刚刚添加进的DataColumn对象的一个引用。因为DataTable对象不是专用于某个特定的数据源的。所以,在定义DataColumn对象的数据类型时,使用.NET Framework的数据类型。
1.4.3  用于表示一列数据的基本组件—— DataColumn
在上面介绍DataTable对象时,已经多次用到了DataColumn对象,现在对它进行详细说明。DataColumn对象表示DataTable对象中的一列。是创建一个DataTable对象的基本组成块。DataColumn对象有一个重要的属性是DataType。DataType属性用来设置和获取存储在该列中的数据的类型。设置DataType的值用于确保在数据库管理系统中正确创建和更新对应的数据。DataType属性支持基本的.NET Framework数据类型,如表1-8所示。
表1-8  基本的.NET框架数据类型
数 据 类 型
描    述
Boolean
布尔型数值,True或False
Byte
代表一个8位的无符号整数,为0~255。Byte中提供了方法可以将它的一个实例转换成字符串类型,或者将一个字符串类型的数字转换成它的实例
Char
代表一个Unicode字符,范围为十六进制的0x0000~0xFFFF
DateTime
表示时间的实例,包含日期和时间
Decimal
表示一个十进制数
Double
表示一个双精度的浮点数
Int16
表示一个16位的有符号整数,为–32 768~32 767
Int32
表示一个32位的有符号整数,为–2 147 483 648~2 147 483 647
Int64
表示一个64位的有符号整数,为–9 223 372 036 854 775 808~9 223 372 036 854 775 807
SByte
表示一个8位的有符号整数,为–128~127
Single
表示一个单精度的浮点数
String
表示一个不可变的字符序列
TimeSpan
表示一个时间间隔
Unit16
表示一个16位的无符号整数,为0~65 535
Unit32
表示一个32位的无符号整数,为0~4 294 967 295
Unit64
表示一个64位的无符号整数,为0~184 467 440 737 095 551 615
此外,DataColumn对象有如下一些常用的属性和事件,如表1-9所示。
表1-9  DataColumn对象的属性和方法描述
属性和方法
描    述
AutoIncrement
获取或设置一个值,来标识当新的行记录添加到表中时,该列是不是自动地在原来的数值基础上递增的数值
AutoIncrementSeed
获取或设置AutoIncrement属性为True时,该列的初始值大小
AutoIncrementStep
获取或设置AutoIncrement属性为True时,该列随行数变化的递增量
ColumnName
获取或设置列的名称
DefaultValue
获取或设置创建新行时,该列的默认值
Unique
获取或设置一个值,用来标识是否该列中每行的值必须唯一
AllowDBNull
获取或设置一个值,用来标识向该表中添加行记录时,该列是否可以接收空值
ReadOnly
获取或设置行记录被添加到表中以后,该列是否可以变化
Expression
获取或设置表达式,用来过滤行记录,计算该列的值或得到该列的统计值
1.4.4  用于表示一行数据的基本组件—— DataRow
DataRow对象用来表示DataTable对象中的一行数据,和DataColumn对象一起,构成了DataTable对象的基本组件。使用DataRow对象的属性和方法可以获取、使用、删除和更新DataTable对象中的值。如前所述,使用DataTable对象中的DataRowCollection可以得到实际的DataRow对象。DataRow对象的一个重要的属性是Item。Item是一个重载的属性,可以返回或设置DataRow对象的每一列的数值。
设置和获取参数columnName对应的列中存储的数值。使用该属性时,可能引发3种异常,如表1-10所示。
表1-10  使用Item属性时产生的异常
异 常 类 型
描    述
IndexOutOfRangeException
参数columnName对应的列没有找到
InvalidCastException
当设置属性值时,它的类型和该列的数据类型不匹配
DeletedRowInaccessibleException
当试图设置一个已经删除的行记录的值时引发
1.4.5  用于表示主从关系的组件—— DataRelation
DataRelation对象用来表示两个DataTable对象之间的主/从关系。通过DataColumn对象建立两个DataTable对象之间的关系。例如,在一个Customer/Order关系中,Customers表是该关系中的主表,而Orders表是从表,类似与主键/外键之间的关系。关系将建立在主表和从表中相匹配的列之间。所以,这两个列的数据类型必须相同。
DataRelation对象可以联系从主DataRow对象到从DataRow对象之间的各种变化,要控制这些值如何变化,需要添加ForeignKeyConstraint到DataTable对象的ConstraintCollection中。当DataRelation对象最先被创建时,将首先检查该关系能否确立。当它被添加到DataRelationCollection集合中以后,该关系将开始作用,不允许任何违反该联系的变化发生。在DataRelation对象被创建和添加到DataRelationCollection集合中的这个时间间隔内,可能有额外的变化发生在主行或从行上。如果这导致关系不能再成立,系统将会产生一个异常。
DataRelation对象包含于DataRelationCollection内,可以通过DataSet对象的Relation属性以及DataTable对象的ChildRelations属性和ParentRelations属性来访问。
 
原创粉丝点击