第5章数据集DataSet_第1页
第5章数据集DataSet_第2页
第5章数据集DataSet_第3页
第5章数据集DataSet_第4页
第5章数据集DataSet_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录5.1非连接模型的案例5.2DataSet对象模型5.3关系数据5.4综合运用5.5强类型DataSet5.6小结第第5章数据集章数据集DataSet5.1非连接模型的案例ADO.NET中的数据访问模型可以分成两种:连接模型和非连接模型。在连接模型中,.NET数据提供程序连接到数据源以后,才能对数据源的数据进行数据处理,在这个过程中一直要保持连接状态,数据处理完成后断开与数据源的连接。在非连接模型中,通过.NET数据提供程序连接到数据源,并为来自数据源的数据创建内存中的缓存,这是可以断开数据源的连接。然后在缓存中实现数据的查询、修改、删除的操作,完成后然后再与数据源建立连接,将更改的数据内

2、容合并至数据源。在操作数据库的时候,应该尽可能晚地打开连接并且尽可能早地关闭连接是很重要的,这样可以更好地利用连接池。相对于连接模型而言,非连接模型就更好地体现了这个思想。非连接模型需要缓存数据,需要一个对象保存非连接数据。数据集DataSet,就是.NET框架自带的可用于非连接的数据缓存。5.2DataSet对象模型DataSet 是 ADO.NET 结构的主要组件,是专门为独立于任何数据源的数据访问而设计。因此,它可以用于多种不同的数据源,用于XML数据,或用于管理应用程序本地的数据。数据集DataSet,可以认为是内存中的数据库,DataSet可以是不依赖于任何数据库的独立数据集合。客户

3、端可以通过对DataSet的数据实现数据的查询、修改、删除等操作,从而实现对数据源的同等操作。DataSet支持多表、表间关系、数据约束等,和关系数据库的模型基本一致。DataSet 由一组数据表DataTable 对象和数据关系DataRelation 对象组成,可以通过使用唯一键约束UniqueConstraint 和外键约束ForeignKeyConstraint 对象在 DataSet 中实施数据完整性约束。5.2DataSet对象模型5.2DataSet对象模型DataSet对象包含一个类型为DataTableCollection类型的DataTable对象集合,作为其Tables属

4、性。它也包含一个名为Relations的属性,该属性是DataRelationCollection类型的DataRelation对象集合。类似地,DataTable对象具有一个名为Columns的属性,是DataColumn对象集合,其表现形式是DataColumnCollection对象。它也包含一个DataRowCollection类型的属性,名为Rows,以DataRows对象的形式表示各行记录。可以在DataTable上定义约束(比如UniqueConstraint),这是一个表现为Constraints属性的集合,其类型为ConstraintCollection,可以赋值为一组Con

5、straint类型的对象,或是从Constraint对象继承而来的对象。DataSet对象的属性属性名称数据类型说明CassSensitiveBoolean指示DataSet对象中的字符串比较是否区分大小写DataSetNameStringDataSet对象的名称DefaultViewManagerDefaultViewManagerDataSet对象所包含的数据的自定义视图,以允许使用自定义的DataViewManager对象进行筛选、搜索和导航EnforceConstraintsBoolean指示在尝试执行任何更新操作时是否遵循约束规则ExtendedPropertiesPropertyC

6、ollection用户自定义信息的集合HasErrorsBoolean所有DataTable对象中是否存在错误LocaleCultureInfo用于比较表中字符串的区域设置信息PrefixString一个XML前缀,该前缀是DataSet的命名空间的别名RelationsDataRelationCollectionDataSet对象中的数据关系的集合TablesDataTableCollectionDataSet对象中的数据表的集合DataSet对象的方法方法名称返回类型说明AcceptChangevoid提交自加载此DataSet对象以后或最后一次调用AcceptChanges()方法以后对

7、DataSet对象进行的所有更改Clearvoid通过移除所有表中的所有行来清除任何数据的DataSetCloneDataSet复制DataSet的结构,包括所有DataTable架构、关系和约束。不要复制任何数据。CopyDataSet复制该DataSet对象的结构和数据GetChangesDataSet获取DataSet对象的副本,该副本包含自上次加载以来或自调用AcceptChanges()方法以来对该数据集进行的所有更改GetXmlString返回存储在DataSet对象中的数据的XML表示形式GetXmlSchemaString返回存储在DataSet对象中的数据的XML表示形式的X

8、SD架构HasChangesBoolean获取一个值,该值指示DataSet对象是否有更改,包括新增行、已删除的行或已修改的行Mergevoid将指定的DataSet、DataTable或DataRow对象的数组合并到当前的DataSet或DataTable对象中ReadXmlXmlReadMode将XML架构和数据读入DataSet对象ReadXmlSchemavoid将XML架构读入DataSet对象RejectChangesvoid取消自从创建DataSet对象以来或自上次调用AcceptChanges()方法以来对DataSet对象进行的所有更改Resetvoid将DataSet对象重

9、置为其初始状态。子类应重写Reset对象,以便将DataSet对象还原到其原始状态WriteXmlvoid方法用于从DataSet对象写XML数据,还可以选择写架构WriteXmlSchemavoid写XML架构形式的DataSet结构5.2DataSet对象模型创建DataSet 对象实例:使用Microsoft Visual Studio 2010创建DataSet实例编程方式实现创建DataSet实例:(1)初始化DataSet类的新实例。 DataSet ds = new DataSet();(2)用给定名称初始化DataSet类的新实例。 DataSet FastFoodDS = n

10、ew DataSet(FastFood);DataTableDataTable 类是 .NET Framework 类库中 System.Data 命名空间的成员。您可以独立创建和使用 DataTable,也可以作为 DataSet 的成员创建和使用。每一个DataSet都是一个或多个DataTable 对象的集合(DataTable相当于数据库中的表),这些对象由数据行(DataRow)、数据列(DataColumn)、字段名(Column Name)、数据格(Item),以及约束(Constraint)和有关DataTable对象中数据的关系(Relations)与数据显示排序(DataV

11、iew)信息组成。DataTable对象的属性属性名称属性名称数据类型数据类型说明说明CaseSensitiveBoolean指示表中的字符串比较是否区分大小写。指示表中的字符串比较是否区分大小写。ChildRelationsDataRelationCollection 获取此获取此 Dateable 的子关系的集合。的子关系的集合。ColumnsDataColumnCollection获取属于该表的列的集合。获取属于该表的列的集合。ConstraintsConstraintCollection获取由该表维护的约束的集合。获取由该表维护的约束的集合。DataSetDataSet获取此表所属的获

12、取此表所属的 DataSet。DefaultViewDataView获取可能包括筛选视图或游标位置的表的自定义视图。获取可能包括筛选视图或游标位置的表的自定义视图。ExtendedProperties PropertyCollection获取自定义用户信息的集合。获取自定义用户信息的集合。HasErrorsBoolean获取一个值,该值指示该表所属的获取一个值,该值指示该表所属的 DataSet 的任何表的任何表的任何行中是否有错误。的任何行中是否有错误。LocaleCultureInfo获取或设置用于比较表中字符串的区域设置信息。获取或设置用于比较表中字符串的区域设置信息。MinimumCa

13、pacityInteger获取或设置该表最初的起始大小。获取或设置该表最初的起始大小。NamespaceString获取或设置获取或设置 DataTable 中所存储数据的中所存储数据的 XML 表示形表示形式的命名空间。式的命名空间。ParentRelationsDataRelationCollection 获取该获取该 DataTable 的父关系的集合。的父关系的集合。PrefixString获取或设置获取或设置 DataTable 中所存储数据的中所存储数据的 XML 表示形表示形式的命名空间。式的命名空间。PrimaryKeyDataColumn获取或设置充当数据表主键的列的数组。获

14、取或设置充当数据表主键的列的数组。RowsDataRowCollection获取属于该表的行的集合。获取属于该表的行的集合。TableNameString获取或设置获取或设置 DataTable 的名称。的名称。DataTable对象的方法方法名称方法名称返回值类型返回值类型说明说明AcceptChanges void 提 交 加 载提 交 加 载 D a t a Ta b l e 对 象 以 后 或 最 后 一 次 调 用对 象 以 后 或 最 后 一 次 调 用AcceptChanges()方法以后对方法以后对DataTable对象进行的所有更改对象进行的所有更改Clearvoid删除删除

15、DataTable对象中所有表格的所有行对象中所有表格的所有行Clone DataTable复制复制DataTable对象的结构,包括对象的结构,包括DataTable架构、关系和架构、关系和约束并返回。不复制任何数据。约束并返回。不复制任何数据。ComputeObject计算当前行中通过过滤条件的指定表达式。计算当前行中通过过滤条件的指定表达式。 GetChanges DataTable重载,取得上次装入重载,取得上次装入DataTable对象以后或最后一次调用对象以后或最后一次调用AcceptChanges()方法以后方法以后DataTable对的拷贝。对的拷贝。 GetError Dat

16、aRow重载,取得发生错误的所有重载,取得发生错误的所有DataRow对象的拷贝。对象的拷贝。 LoadDataRow DataRow寻找和更新指定的寻找和更新指定的DtatRow对象。对象。 如果找不到匹配的如果找不到匹配的DtatRow对象,则用指定的指生成新行。对象,则用指定的指生成新行。NewRow DataRow在在DataTable中生成新的中生成新的DtatRow对象。对象。 RejectChanges void取 消 加 载取 消 加 载 D a t a Ta b l e 对 象 以 后 或 最 后 一 次 调 用对 象 以 后 或 最 后 一 次 调 用AcceptChang

17、es()方法以后对方法以后对DataTable对象进行的所有更改对象进行的所有更改SelectDataRow重载,返回重载,返回 DataTable 中匹配指定过滤字符串的中匹配指定过滤字符串的DataRow对象。也可以传入一个字符串,其中包含描述如何排序对象。也可以传入一个字符串,其中包含描述如何排序DataRow对象的细节。对象的细节。 创建DataTable 对象实例 使用Microsoft Visual Studio 2010创建DataTable实例(1)选择创建的dataset1对象的Tables属性右边的省略号按钮,会弹出一个表集合编辑器。(2)选择Add,会添加一个名为Tabl

18、e1的表,在右边的属性中修改TableName属性值为Customer,即在dataset1对象添加了一个名为Customer的表。具体操作见教材P92。创建DataTable 对象实例2编程方式实现创建DataTable实例(1)以下示例创建 DataTable 对象的实例,并为其指定名称“Customer”:DataTable customerTable = new DataTable(Customer);DataTable bookingOrderTable = new DataTable(BookingOrder);(2)以下示例创建 DataTable 实例,将其添加到 DataSe

19、t 的 Tables 集合中。DataSet fastFoodDS = new DataSet();DataTable customerTable = fastFoodDS.Tables.Add(Customer);DataTable bookingOrderTable = fastFoodDS.Tables.Add(BookingOrder);DataColomn每个DataTable都有一个Columns集合,该集合是DataColumn对象的容器。一个DataColumn对象对应表中的一列。DataColumn对象并非实际包含存储在DataTable中的数据,而是存储了有关该列结构的信息

20、。DataColomn对象的属性属性名称属性名称数据类型数据类型说明说明AllowDBNull Boolean获取或设置一个值获取或设置一个值,该值指示对于属于该表的行该值指示对于属于该表的行,此列中是否允许空值。此列中是否允许空值。 AutoIncrement Boolean获取或设置一个值,该值指示对于添加到该表中的新行,列是否将列获取或设置一个值,该值指示对于添加到该表中的新行,列是否将列的值自动递增。的值自动递增。 AutoIncrementSeed Integer获取或设置其获取或设置其 AutoIncrement 属性设置为属性设置为 true 的列的起始值。的列的起始值。 Aut

21、oIncrementStep Integer获取或设置其获取或设置其 AutoIncrement 属性设置为属性设置为 true 的列使用的增量。的列使用的增量。 Caption String获取或设置列的标题。获取或设置列的标题。 ColumnMapping MappingType获取或设置列的获取或设置列的 MappingType。 ColumnName String获取或设置获取或设置 DataColumnCollection 中的列的名称。中的列的名称。 DataType Type获取或设置存储在列中的数据的类型。获取或设置存储在列中的数据的类型。 DefaultValue Objec

22、t在创建新行时获取或设置列的默认值。在创建新行时获取或设置列的默认值。 Expression String获取或设置表达式,用于筛选行、计算列中的值或创建聚合列。获取或设置表达式,用于筛选行、计算列中的值或创建聚合列。 ExtendedProperties PropertyCollection获取与获取与 DataColumn 相关的自定义用户信息的集合。相关的自定义用户信息的集合。 MaxLength Integer获取或设置文本列的最大长度。获取或设置文本列的最大长度。 Namespace String获取或设置获取或设置 DataColumn 的命名空间。的命名空间。 Ordinal I

23、nteger获取列在获取列在 DataColumnCollection 集合中的位置。集合中的位置。 Prefix String获取或设置一个获取或设置一个 XML 前缀,该前缀是前缀,该前缀是 DataTable 的命名空间的别名。的命名空间的别名。 ReadOnly Boolean获取或设置一个值获取或设置一个值,该值指示一旦向表中添加了行该值指示一旦向表中添加了行, 列是否还允许更改。列是否还允许更改。 Table DataTable获取列所属的获取列所属的 DataTable。 Unique Boolean获取或设置一个值,该值指示列的每一行中的值是否必须是唯一的。获取或设置一个值,该

24、值指示列的每一行中的值是否必须是唯一的。 为DataTable 对象创建DataColumn集合1使用Microsoft Visual Studio 2010创建DataColumn集合(1)接着上节创建DataTable的步骤继续下去,点击dataset1对象的Tables属性右边的省略号按钮,在弹出的表集合编辑器中选择Customer表,点击其Columns属性右边的省略号按钮,会弹出一个列集合编辑器,在这里可以添加DataColumn到Customer表中。(2)选择Add,会添加一个名为Column1的列,在右边的属性中修改ColumnName属性值为CustomerID、修改Data

25、Type属性值为System.Int32、修改AllowDBNulle属性值为False等等,这时Customer表就增加了一个CustomerID列。(3)选择Add,可以依次为Customer表添加UserName、CompanyName和CompanyAddress列直至该表创建完成。具体操作见教材P94。为DataTable 对象创建DataColumn集合2编程方式实现创建DataColumn集合以下程序代码就是向customerTable的列集合中添加四个DataColumn:DataSet fastFoodDS = new DataSet();DataTable customer

26、Table = fastFoodDS.Tables.Add(Customer);DataColumn workCol = customerTable.Columns.Add(CustomerID, typeof(Int32);workCol.AllowDBNull = false;workCol.Unique = true;customerTable.Columns.Add(UserName, typeof(String);customerTable.Columns.Add(CompanyName, typeof(String);customerTable.Columns.Add(Compan

27、yAddress , typeof(String);程序中用于 CustomerID列的属性设置为不允许 DBNull 值并将值约束为唯一。为DataTable 对象创建DataColumn集合2编程方式实现创建DataColumn集合以下程序代码是向bookingOrderTable的列集合中添加三个DataColumn:DataTable bookingOrderTable = fastFoodDS.Tables.Add(BookingOrder);DataColumn col = bookingOrderTable.Columns.Add(OrderID,typeof(int32); b

28、ookingOrderTable.Columns.Add(CustomerID , typeof(Int32);bookingOrderTable.Columns.Add(Number, typeof(Int32);DataRowDataRow 和 DataColumn 对象都是 DataTable 的主要组件。DataColumn 对象是描述DataTable数据结构的,而DataRow 对象是描述DataTable数据内容的。DataRow对象添加在DataTable 的属性Rows中,属性Rows 的类型是DataRowCollection。为DataTable创建DataRow对象1、

29、 使用 DataTable 对象的 NewRow 方法创建新的DataRow:DataRow workRow = customerTable.NewRow(); / customerTable结构参考上节的定义2、使用索引或列名来为新建的行对象设置各个DataColomn值:workRowCustomerID =1001;workRowUserName = 乔峰;或用:workRow1 = 乔峰;3、使用DataTable对象的Add方法将新的DataRow添加到DataTable 中的Rows属性中:customerTable.Rows.Add(workRow);为DataTable创建Da

30、taRow对象也可以通过传入值的数组(类型化为Object),调用 Add 方法来添加新行: customerTable.Rows.Add(new Object 1002, 郭靖);将类型化为 Object 的值的数组传递到 Add 方法,可在表内创建新行并将其列值设置为对象数组中的值。请注意,数组中的值会根据它们在表中出现的顺序相继与各列匹配。以下代码段是向customerTable对象中添加了 10 行数据:DataRow workRow;for (int i = 0; i = 9; i+) workRow = customerTable.NewRow(); workRow0 = i; w

31、orkRow1 = userName + i.ToString(); customerTable.Rows.Add(workRow);从DataTable中读取DataRow对象通过DataTable对象中的Rows属性,获取DataRow对象集合,通过索引获得DataRow对象,然后使用DataRow对象的Item属性来读取该行中任意列的值。由于Item是DataRow类的默认属性,所以可以隐式地使用它。如下面的代码段就是向控制台输出customerTable对象第一行第一列(CustomerID)的值:DataRow row;row = customerTable.Rows0;Consol

32、e.WriteLine(row0);Console.WriteLine(rowCustomerID);Console.WriteLine(rowcustomerTable.ColumnsCustomerID);DataRow对象的属性属性名称属性名称数据类型数据类型说明说明HasErrors Boolean获取一个值,该值指示某行是否包含错误。获取一个值,该值指示某行是否包含错误。 Item Object已重载。已重载。 获取或设置存储在指定列中的数据。获取或设置存储在指定列中的数据。 ItemArray Object数组数组通过一个数组来获取或设置此行的所有值。通过一个数组来获取或设置此行的

33、所有值。 RowError String获取或设置行的自定义错误说明。获取或设置行的自定义错误说明。 RowState DataRowState获取与该行和获取与该行和 DataRowCollection 的关系相关的关系相关的当前状态。的当前状态。 DataRow的的RowState属性(状态)属性(状态)取值有取值有5种:种:Detached、Unchanged、Added、Deleted、ModifiedTable DataTable获取该行拥有其架构的获取该行拥有其架构的 DataTable。 DataRow对象的方法方法名称方法名称返回值类型返回值类型说明说明AcceptChange

34、s void提交自上次调用提交自上次调用 AcceptChanges 以来对该行进行的所有更改。以来对该行进行的所有更改。 BeginEdit void对对 DataRow 对象开始编辑操作。对象开始编辑操作。 CancelEdit void取消对该行的当前编辑。取消对该行的当前编辑。 ClearErrors void清除行的错误。这包括清除行的错误。这包括 RowError 和用和用 SetColumnError 设设置的错误。置的错误。 Delete void删除删除 DataRow。 EndEdit void终止发生在该行的编辑。终止发生在该行的编辑。 GetChildRows Data

35、Row已重载。已重载。 获取获取 DataRow 的子行。的子行。 GetColumnError String已重载。已重载。 获取列的错误说明。获取列的错误说明。 GetColumnsInError DataColumn获取包含错误的列的数组。获取包含错误的列的数组。 GetParentRow DataRow已重载。已重载。 获取获取 DataRow 的父行。的父行。 GetParentRows DataRow已重载。已重载。 获取获取 DataRow 的父行。的父行。 HasVersion Boolean获取一个值,该值指示指定的版本是否存在。获取一个值,该值指示指定的版本是否存在。 Is

36、Null Boolean已重载。获取一个值已重载。获取一个值,该值指示指定的列是否包含空值。该值指示指定的列是否包含空值。 RejectChanges void拒绝自上次调用拒绝自上次调用 AcceptChanges 以来对该行进行的所有更改。以来对该行进行的所有更改。 SetAdded void将将 DataRow 的的 Rowstate 更改为更改为 Added。 SetColumnError void已重载。已重载。 为列设置错误说明。为列设置错误说明。 SetModified void将将 DataRow 的的 Rowstate 更改为更改为 Modified。 SetParentRo

37、w void已重载。已重载。 设置设置 DataRow 的父行。的父行。 设置主键:PrimaryKey属性数据库表通常都有一列或一组列,用于唯一地标识表中的每一行。这种具有标识作用的列或列组被称为主键(PrimaryKey )。DataTable的PrimaryKey 属性会将一个或多个 DataColumn 对象的数组接收为它的值。在将一个单独的 DataColumn 标识为 DataTable 的 PrimaryKey 时,表会自动将列的 AllowDBNull 属性设置为 false,并将 Unique 属性设置为 true。如果是多列主键,则只有 AllowDBNull 属性自动设置

38、为 false。使用Microsoft Visual Studio 2010设置DataTable的PrimaryKey 属性字段,打开表集合编辑器,选择表,然后在属性窗口中设置PrimaryKey属性,具体操作参考教材P97图5-9。编程实现对PrimaryKey 属性的设置(1)将单独一列定义为主键:customerTable.PrimaryKey = new DataColumn customerTable.ColumnsCustomerID;或者写成:DataColumn myColArray = new DataColumn1;myColArray0 = customerTable.

39、ColumnsCustomerID;customerTable.PrimaryKey = myColArray;()将两列或多列定义为主键“customerTable.PrimaryKey = new DataColumn customerTable.ColumnsUserName, customerTable.ColumnsCompanyName ;或者写成:DataColumn myKey = new DataColumn2;myKey0 = customerTable.ColumnsUserName;myKey1 = customerTable.ColumnsCompanyName;cu

40、stomerTable.PrimaryKey = myKey;表约束ConstraintADO.NET 中DataTable有两种约束: 唯一约束(UniqueConstraint):确保指定的某列或多个列中的数据组合在同一个DataTable中的唯一性,防止数据冗余。外键约束(ForeignKeyConstraint):是DataTable之间的约束规则。ForeignKeyConstraint 强制了有关如何对相关表所做更新和删除进行传播的规则。例如,如果更新或删除了一个表格中的某行中的值,并且一个或多个相关的表中也使用了这个相同的值,ForeignKeyConstraint 将会决定相关

41、表中发生的操作。默认情况下,通过将 DataRelation 添加至 DataSet 来创建两张或多张表之间的关系时,两种约束都会自动创建。UniqueConstraint对象的属性属性名称属性名称数据类型数据类型说明说明ColumnsDataColumn对象数组对象数组返回作为约束中一部分的返回作为约束中一部分的列列ConstraintNameString包含约束的名称包含约束的名称ExtendedProperties PropertyCollection包含动态属性和动态值的包含动态属性和动态值的集合集合IsPrimaryKeyBoolean表示约束是否是表示约束是否是DataTable的

42、主键的主键TableDataTable返回约束所属的返回约束所属的DataTableUniqueConstraint 对象下面是几种创建UniqueConstraint 对象的方法:(1)使用Microsoft Visual Studio 2010设置DataTable的Constraints 属性字段,打开约束集合编辑器,可创建UniqueConstraint 对象;(2)将DataTable 的某列的Unique 属性设置为 true,会自动创建UniqueConstraint 对象。通过将单列的 Unique 属性设置为 false,则相关的UniqueConstraint对象也被删除;

43、(3)当设置DataTable 的 PrimaryKey 时,会自动创建UniqueConstraint 对象;从 DataTable 的 PrimaryKey 属性中删除时,则相关的UniqueConstraint对象也被删除。(4)通过编程使用UniqueConstraint 构造函数创建UniqueConstraint对象,然后将创建的UniqueConstraint 对象添加到该表的 Constraints 属性中。UniqueConstraint 对象以下程序代码是为 DataTable 的两列创建 UniqueConstraint对象:UniqueConstraint custUC

44、 = new UniqueConstraint(new DataColumn customerTable.ColumnsCustomerID, customerTable.ColumnsCompanyName);customerTable .Constraints.Add(custUC);ForeignKeyConstraint对象的属性属性名称属性名称数据类型数据类型说明说明AcceptRejectRuleAeceptRejectRule控制对父行调用控制对父行调用AcceptChanges方法或方法或RejectChanges方法是否影响子行方法是否影响子行ColumnsDataColum

45、n对象数组对象数组返回构成约束的子表中的列返回构成约束的子表中的列ConstraintNameString包含约束的名称包含约束的名称DeleteRuleRule 控制对父行的删除是否影响子行,或是控制对父行的删除是否影响子行,或是怎样影响子行怎样影响子行ExtendedProperties PropertyCollection包含动态属性或动态值的集合包含动态属性或动态值的集合RelatedColumnsDataColumn对象数组对象数组返回构成约束的父表中的列返回构成约束的父表中的列RelatedTableDataTable返回跟约束有关的父表返回跟约束有关的父表TableDataTab

46、le返回跟约束有关的子表返回跟约束有关的子表UpdateRuleRule控制对父行的修改是否影响子行,或是控制对父行的修改是否影响子行,或是怎样影响子行怎样影响子行 ForeignKeyConstraint对象 ForeignKeyConstraint 的 DeleteRule 和 UpdateRule 属性值:规则规则说明说明Cascade删除或更新相关行。这是默认值。删除或更新相关行。这是默认值。SetNull将相关行中的值设置为将相关行中的值设置为 DBNull。SetDefault将相关行中的值设置为默认值。将相关行中的值设置为默认值。None对相关行不采取任何操作对相关行不采取任何操

47、作ForeignKeyConstraint对象创建ForeignKeyConstraint对象的方法有很多:(1)使用Microsoft Visual Studio 2010设置DataTable的Constraints 属性字段,打开约束集合编辑器,可创建ForeignKeyConstraint 对象;(2)通过编程使用ForeignKeyConstraint 构造函数创建ForeignKeyConstraint对象,然后将创建的ForeignKeyConstraint 对象添加到该表的 Constraints 属性中。ForeignKeyConstraint对象在创建 ForeignKey

48、Constraint对象时,可将 DeleteRule 和 UpdateRule 值作为参数传递给构造函数,也可将它们设置属性值(其中 UpdateRule 值设为默认值,Cascade):ForeignKeyConstraint custOrderFK = new ForeignKeyConstraint(CustOrderFK,fastFoodDS.TablesCustomer.ColumnsCustomerID, fastFoodDS.TablesBookingOrder .ColumnsCustomerID);custOrderFK.DeleteRule = Rule.None; fa

49、stFoodDS.TablesBookingOrder.Constraints.Add(custOrderFK);动态构建DataTableDataTable 对象是内存中的数据表格,可以由它来缓存数据,作为数据的操作对象。下面通过实例说明如何动态创建DataTable:首先新建一个Windows窗体应用程序ch52,从工具箱中把DataGridView控件拖拽到Form1窗体设计器中,名称为dataGridView1,用来显示动态创建DataTable中的数据。(详见教材P100)接下来在Form1.cs中添加如下代码,其中GetData方法就是动态创建DataTable的实例dt对象,通过

50、从数据库中读取数据并存入到动态创建的dt对象中,然后绑定到dataGridView1控件上显示数据。(具体代码参考教材P101)DataTable的事件DataTable 对象提供一系列可以由应用程序处理的事件。名称名称说明说明ColumnChanged 在在 DataRow 中指定的中指定的 DataColumn 的值被更改后发生。的值被更改后发生。 ColumnChanging 在在 DataRow 中指定的中指定的 DataColumn 的值发生更改时发生。的值发生更改时发生。 RowChanged 在成功更改在成功更改 DataRow 之后发生。之后发生。 RowChanging 在在

51、 DataRow 正在更改时发生。正在更改时发生。 RowDeleted 在表中的行已被删除后发生。在表中的行已被删除后发生。 RowDeleting 在表中的行要被删除之前发生。在表中的行要被删除之前发生。 TableCleared 清除清除 DataTable 后发生。后发生。 TableClearing 清除清除 DataTable 后发生。后发生。 TableNewRow 插入新插入新 DataRow 时发生。时发生。 DataTable事件的实际用法workTable.ColumnChanged += new DataColumnChangeEventHandler(OnColumn

52、Changed);protected static void OnColumnChanged( object sender, DataColumnChangeEventArgs args) Console.Write( ColumnChanged: ); Console.Write(args.Column.ColumnName + changed to + args.ProposedValue + n);DataTable事件的实际用法workTable.ColumnChanging += new DataColumnChangeEventHandler(OnColumnChanging);p

53、rotected static void OnColumnChanging( object sender, DataColumnChangeEventArgs args) Console.Write(ColumnChanging: ); Console.Write(args.Column.ColumnName + equals + args.Rowargs.Column + , changing to + args.ProposedValue + n); DataTable事件的实际用法workTable.RowChanged += new DataRowChangeEventHandler(

54、OnRowChanged);protected static void OnRowChanging( object sender, DataRowChangeEventArgs args) if (args.Action != DataRowAction.Nothing) Console.WriteLine( RowChanging: Action = + args.Action + , CustID = + args.RowCustID);DataTable事件的实际用法workTable.RowChanging += new DataRowChangeEventHandler(OnRowC

55、hanging);protected static void OnRowChanged( object sender, DataRowChangeEventArgs args) if (args.Action != DataRowAction.Nothing) Console.WriteLine( RowChanged: Action = + args.Action + , CustID = + args.RowCustID);5.3关系数据ADO.NET的DataSet对象借助于DataRelation类也可以处理来自相关DataTable对象的数据。DataRelation 定义两张表之间

56、的关系。在包含多个 DataTable 对象的 DataSet 中,可以使用DataRelation 对象来使一张表与另一张表相关联,在多张表之间导航,以及从相关表中返回子行或父行。5.3关系数据创建DataRelation 所需的参数是所创建的DataRelation 的名称以及对用作关系中父列和子列的那些列的一个或多个 DataColumn 引用的数组。创建DataRelation对象的构造函数主要有:(1)DataRelation (String, DataColumn, DataColumn) 使用指定的 DataRelation 名称,父级和子级 DataColumn 对象,初始化

57、DataRelation 类的新实例。 (2)DataRelation (String, DataColumn, DataColumn) 使用指定的 DataRelation 名称以及父级和子级 DataColumn 对象的匹配的数组,初始化 DataRelation 类的新实例。 (3)DataRelation (String, DataColumn, DataColumn, Boolean) 使用指定名称、父级和子级 DataColumn 对象以及指示是否要创建约束的值,初始化 DataRelation 类的新实例。 (4)DataRelation (String, DataColumn,

58、 DataColumn, Boolean)使用指定的名称、父级和子级 DataColumn 对象的匹配数组以及指示是否要创建约束的值,初始化 DataRelation 类的新实例。 5.3关系数据默认情况下,向DataSet 中添加DataRelation 会将一个 UniqueConstraint 添加到父表中并将一个 ForeignKeyConstraint 添加到子表中。5.3关系数据下面代码示例为前文创建的fastFoodDS中的两个DataTable 对象来创建一个DataRelation 。这两个DataTable通过CustomterID列实现关联。先创建一个DataRelati

59、on对象,然后将这个DataRelation对象添加到fastFoodDS对象的的 Relations 集合中。该示例中的第一个参数指定所创建的DataRelation 的名称。 第二个参数设置父 DataColumn,第三个参数设置子 DataColumn:DataRelation rel=new DataRelation(CustOrders, fastFoodDS.TablesCustomer.ColumnsCustomerID, fastFoodDS.TablesBookingOrder.ColumnsCustomerID);fastFoodDS.Relations.Add(rel);

60、 或者写成:fastFoodDS.Relations.Add(CustOrders, fastFoodDS.TablesCustomer.ColumnsCustomerID, fastFoodDS.TablesBookingOrder.ColumnsCustomerID); DataRelation对象的常用属性名称名称说明说明ChildColumns 获取此关系的子获取此关系的子 DataColumn 对象。对象。ChildKeyConstraint 获取关系的获取关系的 ForeignKeyConstraint。ChildTable 获取此关系的子表。获取此关系的子表。DataSet 获取

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论