Setnull当表中记录被删除或者更新以后,对应表中的记录被置为Null SetDefault当表中记录被删除或者更新以后,对应表中的记录被置为缺省值 当表中记录被删除或者更新以后,对应表中的记录不做任何处理 Default当表中记录被删除或者更新以后, ForeignKey Constraint采用其缺省值, 通常该值为 Cascade 具体使用 ForeigKey Constraint时,首先应创建它,然后设置 DeleteRule和 UpDateRule 属性,指明当删除和更新记录时,对应表的处理规则 例子:我们对客户信息表定义一个外键定义,它定义当客户信息表中记录删除时,其关 联表一购物信息表中的数据也应删除(意味着用户不存在,自然也不应该有他的购物信 息),当客户信息表中记录被修改时,购物信息置为缺省的特殊值(意味着,当销售人员 发生差错,记错购物用户,那么以他的名义购物的定单不应算在该用户头上,置为特殊标 记,以供今后修改),代码演示如下 dim fk as New ForeignKey Constraint(ds. Tables("Customer").Columns("CUNO) ds. Tables(“ Order” Columns(“CUNO) 创建外键约束为 Customer表和 Order表中CUNO字段 fk. Delete Rule=Cascade fk UpdateRule=Set Default 删除规则为 Cascade,修改规则为 SetDefault ds. Tables(" Customer").Constraints. Add(fk) 加入 Customer表的一致性约束集合中 Unique Constraint,唯一性约束,它指定了数据表中的一个列或者几个列的集合的值的 唯一性,通常被指定为唯一约束的字段都是表的键值 例如:对于客户信息表,因为每个人的购物都必须和别人区别,这样才能保证正确地付 款和发送货物,因而每一个人的客户编号都不应该相同,这时就可以使用唯一性约束来保 证客户信息表中的客户编号唯一。演示代码如下 dim uc as Unique Constraint uc=New Unique Constraint(ds. Tables("Customer" ).Columns("CUNO)) 指定唯一约束为 Customer表中的CUNO字段 ds. Tables("Customer").Constraints. Add(uc) 把唯一约束加入 Customer表的约束中 6.处理 DataSet的事件 为了便于用户对 DataSet的控制, asp. net提供了 DataSet的一系列可被用户处理的事件 它们包括 Property Change当属性发生改变时 · Mergefailed DataSet合并失败时 删除一个表时 RemoveRelation删除一个关系时 Adding the event handler to the event增加一个事件处理函数时
·SetNull 当表中记录被删除或者更新以后,对应表中的记录被置为 Null ·SetDefault 当表中记录被删除或者更新以后,对应表中的记录被置为缺省值 ·None 当表中记录被删除或者更新以后,对应表中的记录不做任何处理 ·Default 当表中记录被删除或者更新以后,ForeignKeyConstraint 采用其缺省值, 通常该值为 Cascade 具体使用 ForeigKeyConstraint 时,首先应创建它,然后设置 DeleteRule 和 UpDateRule 属性,指明当删除和更新记录时,对应表的处理规则。 例子:我们对客户信息表定义一个外键定义,它定义当客户信息表中记录删除时,其关 联表—购物信息表中的数据也应删除(意味着用户不存在,自然也不应该有他的购物信 息),当客户信息表中记录被修改时,购物信息置为缺省的特殊值(意味着,当销售人员 发生差错,记错购物用户,那么以他的名义购物的定单不应算在该用户头上,置为特殊标 记,以供今后修改),代码演示如下: dim fk as New ForeignKeyConstraint(ds.Tables(“Customer”).Columns(“CUNO”), ds.Tables(“Order”.Columns(“CUNO”)) ‘创建外键约束为 Customer 表和 Order 表中 CUNO 字段 fk.DeleteRule=Cascade fk.UpdateRule=SetDefault ‘删除规则为 Cascade,修改规则为 SetDefault ds.Tables(“Customer”).Constraints.Add(fk) ‘加入 Customer 表的一致性约束集合中 UniqueConstraint,唯一性约束,它指定了数据表中的一个列或者几个列的集合的值的 唯一性,通常被指定为唯一约束的字段都是表的键值。 例如:对于客户信息表,因为每个人的购物都必须和别人区别,这样才能保证正确地付 款和发送货物,因而每一个人的客户编号都不应该相同,这时就可以使用唯一性约束来保 证客户信息表中的客户编号唯一。演示代码如下: dim uc as UniqueConstraint uc=New UniqueConstraint(ds.Tables(“Customer”).Columns(“CUNO”)) ‘指定唯一约束为 Customer 表中的 CUNO 字段 ds.Tables(“Customer”).Constraints.Add(uc) ‘把唯一约束加入 Customer 表的约束中 6.处理 DataSet 的事件 为了便于用户对 DataSet 的控制,asp.net 提供了 DataSet 的一系列可被用户处理的事件, 它们包括: ·PropertyChange 当属性发生改变时 ·MergeFailed DataSet 合并失败时 ·RemoveTable 删除一个表时 ·RemoveRelation 删除一个关系时 ·Adding the event handler to the event 增加一个事件处理函数时
例如 ds AddOn Property Change( new System Component Model Property Change EventHandler (Addressof me. Data SetProperty Change) 指定当 DataSet发生 Property Change事件时的消息处理函数为 DataSet Property Change ds. AddOnMergeFailed(new System. Data. MergeFailed EventHandler (AddressOf me. Data Set MergeFailed)) 指定当 DataSet发生 Mergefailed事件时的消息处理函数为 DataSet MergeFailed 当 Property Change发生时的处理函数 Private Sub Data Set Property Change By Val sender As Object, By Val e As System Property Change EventArgs) 当 MergeFailed发生时的处理函数 Private Sub dataSetMergeFailed (By Val sender As Object, By Val e As System. Data. MergeFaileed Event Args) End Sub 3333使用 Datatable DataTable是 DataSet中一个对象,它与数据库表的概念基本一致,简单起见,你就可以 把它认成是数据库 DataSet中的表 1.创建一个 DataTable DataTable创建器跟使用 DataSets创建器差不多,可以跟一个参数,用以指定表名。 例如: dim My Table as dataTable My Table = New Data Table("Test") My Table. Case Sensitive= False My Table. Minimum capacity =100 其中 Case Sensitive属性指定是否区分大小写,这里指定不区分, CaseSensitive属性 是否打开对于查找、排序、过滤等操作有很大的影响。 Minimum Capacity属性指定创建 时保留给数据表的最小记录空间。另外还有一个 TableName的属性,它指定数据表的名 称,例如下面两种方式创建的表是一样的 1) dim My Table as Data Table My Table=New Data Table("test")
例如: ds.AddOnPropertyChange(new System.ComponentModel.PropertyChangeEventHandler _ (AddressOf me.DataSetPropertyChange)) ‘指定当 DataSet 发生 PropertyChange 事件时的消息处理函数为 DataSetPropertyChange ds.AddOnMergeFailed(new System.Data.MergeFailedEventHandler _ (AddressOf me.DataSetMergeFailed)) ‘指定当 DataSet 发生 MergeFailed 事件时的消息处理函数为 DataSetMergeFailed ‘当 PropertyChange 发生时的处理函数 Private Sub DataSetPropertyChange _ (ByVal sender As Object, ByVal e As System.PropertyChangeEventArgs) … End Sub ‘当 MergeFailed 发生时的处理函数 Private Sub DataSetMergeFailed _ (ByVal sender As Object, ByVal e As System.Data.MergeFaileedEventArgs) … End Sub 3.3.3.3 使用 DataTable DataTable 是 DataSet 中一个对象,它与数据库表的概念基本一致,简单起见,你就可以 把它认成是数据库 DataSet 中的表。 1. 创建一个 DataTable DataTable 创建器跟使用 DataSets 创建器差不多,可以跟一个参数,用以指定表名。 例如: dim MyTable as DataTable MyTable = New DataTable("Test") MyTable.CaseSensitive = False MyTable.MinimumCapacity = 100 其中 CaseSensitive 属性指定是否区分大小写,这里指定不区分,CaseSensitive 属性 是否打开对于查找、排序、过滤等操作有很大的影响。MinimumCapacity 属性指定创建 时保留给数据表的最小记录空间。另外还有一个 TableName 的属性,它指定数据表的名 称,例如下面两种方式创建的表是一样的。 1) dim MyTable as DataTable MyTable=New DataTable(“test”)
2)dim my Table as New Data Table My Table TableName=test 2.创建表列 个 DataTable又含有一个表列( Columns)的集合。表列的集合形成了表的数据结构, 就如同数据库概念中,字段对应于表一样。我们可以使用 Columns集合的Add方法向 表中添加表列。该方法带有两个参数,一个是表列名,一个是该列的数据类型。由于我 们通常在定义表列时,是使用net构架中的数据类型,而非数据库的数据类型,所以需 要使用 Get lype方法把net架构的数据类型转换成数据库中的数据类型 例如:我们建立一个客户信息表( Customer),它含有三个字段: 用户姓名(CUNM)字符型 客户编号(CUNO)字符型 用户序号(IDNO)整型 Dim My Table as data Table Dim My Column as Data Column My Table= new Data Table("Customer") My Column= My Table Columns. Add ("CUNM", Get Type("String")) My Column=My Table Columns. Add("CUNO", Get Type("String") My Column= My Table Columns. Add("IDNO", Get Type("int32")) 3.创建表达式列 asp. net甚至允许创建一些依赖于其他表达式的表列,这样做的好处是,体现了表 列之间的某种自然的联系。 要创建表达式表列,首先要指定表列的 Datatype属性,它表明了表达式运算结果的数 据类型;然后设置表列的 Expression属性为所需的表达式 例如:一个很明显的例子是利息税,它为总金额★税率★02。在同一表中总金额为 total 列,税率为rate列,利息税为tax列。它们的关系如下 Dim tax As data Column= New Data Column ax Data Type= Get Type("Currency") ax Expression="total *rate*0.20 也可以 My Table Columns. Add("tax", Get Type("Currency"), total*rate*0.20)
2) dim MyTable as New DataTable MyTable.TableName=”test” 2. 创建表列 一个 DataTable 又含有一个表列(Columns)的集合。表列的集合形成了表的数据结构, 就如同数据库概念中,字段对应于表一样。我们可以使用 Columns 集合的 Add 方法向 表中添加表列。该方法带有两个参数,一个是表列名,一个是该列的数据类型。由于我 们通常在定义表列时,是使用.net 构架中的数据类型,而非数据库的数据类型,所以需 要使用 GetType 方法把.net 架构的数据类型转换成数据库中的数据类型。 例如:我们建立一个客户信息表(Customer),它含有三个字段: 用户姓名(CUNM) 字符型 客户编号(CUNO) 字符型 用户序号(IDNO) 整型 Dim MyTable as DataTable Dim MyColumn as DataColumn MyTable = new DataTable("Customer") MyColumn = MyTable.Columns.Add("CUNM",GetType("String") ) MyColumn = MyTable.Columns.Add("CUNO",GetType("String") ) MyColumn = MyTable.Columns.Add("IDNO",GetType("int32") ) 3. 创建表达式列 asp.net 甚至允许创建一些依赖于其他表达式的表列,这样做的好处是,体现了表 列之间的某种自然的联系。 要创建表达式表列,首先要指定表列的 DataType 属性,它表明了表达式运算结果的数 据类型;然后设置表列的 Expression 属性为所需的表达式。 例如:一个很明显的例子是利息税,它为总金额*税率*0.2。在同一表中总金额为 total 列,税率为 rate 列,利息税为 tax 列。它们的关系如下: Dim tax As DataColumn = New DataColumn tax.DataType = GetType("Currency") tax.Expression = "total *rate*0.20" 也可以: MyTable.Columns.Add(“tax”,GetType(“Currency”),”total*rate*0.20)
4.使用自增列 在一些数据库中,我们会发现有这样一种数据类型,通常称作系统序号,当我们向 表中增加一条记录时,该字段会自动累加,以后我们可以通过这一唯一序号来标识每一 条记录。在 asp. net中,同样也可以实现类似的功能,这就是自增表列的使用。 定义自增表列实际上是对 Data Column对象的三个属性: Autoincrement、 AutolncrementSeed、 AutolncrementStep的使用 Autoincrement属性,指定是否打开自增功能。 AutolncrementSeed属性,指定自增的起始值 AutolncrementStep属性,指定自增的步长。 例如 dim My Table as dim My Column as Data Column My Column=My Table Columns. Add( Sono", Get Type( "int32")) My Column Autoincrement=Tr 打开自增功能 My Column Autoincrement Seed=0 自增从0值起始 My Column. AutolncrementStep=2 每次增长2 5.建立主键值 通常在一个表中,我们会定义一个主键,它能够唯一标识该表中的每一条记录。主键可 以为表中的一个表列,也可以为几个表列的集合。主键不能为空,而且不能重复,我们 可以用 DataColumn的两个属性 Allownull和 Unique来实现 ( Data Columnl. AllowNull= False Data Columnl. Unique=True)。最后 DataTable对象的 ey属性指定主键 例如: dim My Column as Data Column dim My Table as Data Table My Column. AllowNull=False My Table Primary Key=My Column 当键值为几个表列的集合时: dim My Column as Data Column My Column(0)=My Table Columns("coll") My Column( 1)My Table Columns(col2")
4. 使用自增列 在一些数据库中,我们会发现有这样一种数据类型,通常称作系统序号,当我们向 表中增加一条记录时,该字段会自动累加,以后我们可以通过这一唯一序号来标识每一 条记录。在 asp.net 中,同样也可以实现类似的功能,这就是自增表列的使用。 定义自增表 列实际上 是对 DataColumn 对象 的三个属 性:AutoIncrement、 AutoIncrementSeed、AutoIncrementStep 的使用。 AutoIncrement 属性,指定是否打开自增功能。 AutoIncrementSeed 属性,指定自增的起始值。 AutoIncrementStep 属性,指定自增的步长。 例如: dim MyTable as New DataTable dim MyColumn as DataColumn MyColumn=MyTable.Columns.Add(“Sqno”,GetType(“int32”)) MyColumn.AutoIncrement=True ‘打开自增功能 MyColumn.AutoIncrementSeed=0 ‘自增从0值起始 MyColumn.AutoIncrementStep=2 ‘每次增长2 5. 建立主键值 通常在一个表中,我们会定义一个主键,它能够唯一标识该表中的每一条记录。主键可 以为表中的一个表列,也可以为几个表列的集合。主键不能为空,而且不能重复,我们 可以用 DataColumn 的 两 个 属 性 AllowNull 和 Unique 来实现 (DataColumn1.AllowNull=False DataColumn1.Unique=True)。最后 DataTable 对象的 PrimaryKey 属性指定主键。 例如: dim MyColumn as DataColumn dim MyTable as DataTable … MyColumn=MyTable.Columns(“CUNO”) MyColumn.AllowNull=False MyColumn.Unique=True MyTable.PrimaryKey=MyColumn 当键值为几个表列的集合时: dim MyColumn as DataColumn() MyColumn(0)=MyTable.Columns(“col1”) MyColumn(1)=MyTable.Columns(“col2”) …
My Table Primary Key=MyColumn 3334数据的载入 向表中加入数据 当一个表结构已经创建好以后,剩下的问题就是如何把数据载入我们已经建立好的表 中。通常采用的方法是,先创建一个 Datarow对象,它类似于数据库概念中的记录,然后 对 DataRow的 Columns集合进行赋值,最后把 DataRow对象加入到 Data Table的 Data Rows 集合中,就相当于在表中插入一条记录。 例如:如下一个表 My Table中有两个列Sqno和Name,sqno为序号,Name设 为 MyName”+序号,我们利用一个循环产生n条记录到 My Table中 Dim i as inte Dim n as integer Dim My Row as dataRow My Row =My Table. NewRowo) 生一条新记录 My Row("Sono")=I 对sqno字段赋值 My Row("Name")="My Name"&i.ToStringO 对name字段赋值 My Table Rows. Add (MyRow) 加入记录到表中 删除表中记录 DataTable的Rows集合提供了两种方法从一个数据表中删除一条记录,它们是 Remove 方法和 Delete方法。示例如下: 删除 My Table中的第三条记录 My Table Rows. Remove(3)或者 My Table Rows(3). Delete Delete方法和 Remove方法的区别不仅仅是方法的使用形式上。当调用 Remove方法后, 那么指定的 DataRow就会从Rows集合中被删除。而 Delete方法调用时,指定的 Datarow 并不真正从Rows集合中删除,只是作了一个删除标记,直到 DataSet对象调用 AcceptChanges 方法的时候,才真正被删除:如果是 RejectChanges方法被调用,那么 Delete方法删除的 DataRow对象将被恢复 使用表中的数据
MyTable.PrimaryKey=MyColumn 3.3.3.4 数据的载入 ⚫ 向表中加入数据 当一个表结构已经创建好以后,剩下的问题就是如何把数据载入我们已经建立好的表 中。通常采用的方法是,先创建一个 DataRow 对象,它类似于数据库概念中的记录,然后 对 DataRow 的 Columns 集合进行赋值,最后把 DataRow 对象加入到 DataTable 的 DataRows 集合中,就相当于在表中插入一条记录。 例如:如下一个表 MyTable 中有两个列 Sqno 和 Name,Sqno 为序号,Name 设 为”MyName”+序号,我们利用一个循环产生 n 条记录到 MyTable 中 Dim i as integer Dim n as integer Dim MyRow as DataRow … For i = 0 to n MyRow = MyTable.NewRow() ‘产生一条新记录 MyRow("Sqno") = I ‘对 sqno 字段赋值 MyRow("Name") = "MyName" & i.ToString() ‘对 name 字段赋值 MyTable.Rows.Add(MyRow) ‘加入记录到表中 Next … ⚫ 删除表中记录 DataTable 的 Rows 集合提供了两种方法从一个数据表中删除一条记录,它们是 Remove 方法和 Delete 方法。示例如下: 删除 MyTable 中的第三条记录: MyTable.Rows.Remove(3)或者 MyTable.Rows(3).Delete Delete 方法和 Remove 方法的区别不仅仅是方法的使用形式上。当调用 Remove 方法后, 那么指定的 DataRow 就会从 Rows 集合中被删除。而 Delete 方法调用时,指定的 DataRow 并不真正从Rows集合中删除,只是作了一个删除标记,直到DataSet对象调用AcceptChanges 方法的时候,才真正被删除;如果是 RejectChanges 方法被调用,那么 Delete 方法删除的 DataRow 对象将被恢复。 ⚫ 使用表中的数据