工作了很长时间了,也有了一点点的经验,看到网上的帖子问道如何定义Datatable的主键,在这里就简单的分析一下。根据数据库基本理论,所谓表中的主键用于对记录行进行唯一标识的属性或者属性集合的统称,同样DataTable的主键属性接受含有一个或多个DataColumn对象的数组。设置单个列为DataTable的主键,请看下面的使用示例代码:
- objStudentTable.PrimaryKey = new DataColumn[]{objStudentTable.Columns["StudentNo"]}
代码中将表objStudentTable的"StudentNo"列作为表的主键。
#T#注意:上面的代码示例中“objStudentTable”是DataTable对象的引用名,DataTable对象还有个表名,如“Student”。前面在讲DataTable实例化时,提到将表名字符串作为参数传给构造函数,这个字符串传给DataTable对象的TableName属性,而TableName属性就是前面所指的表名。DataTable对象引用名和表名不能混为一谈,DataTable对象引用名是以对象角度去考虑数据表,编程中用的较多,而表名是从数据库角度考虑,设计中用的较多。同样道理,DataColumn对象、DataSet对象也存在同样的情况,请读者使用时留意。
为DataTable对象设置复合主键,请看下面的使用示例代码:
- objStudentTable.PrimaryKey = new DataColumn[]{objStudentTable.Columns["StudentNo"], objStudentTable.Columns["StudentName"]};
代码中将表objStudentTable的"StudentNo"列和"StudentName"的组合作为表的主键。
ADO.NET DataTable约束
所谓关系型数据库的约束,实质是数据库理论中三个参照完成整性的规定:实体完整性(主属性非空唯一性),参照完整性(外键可以为空,一旦添加数据则必须受制于主表的主键约束)和用户定义完整性(用户自行规定的属性规则)。DataTable对象的属性Constraints就是用来进行对关系型数据表进行约束的,它里面可以包含若干Constraint对象,每个Constraint对象是这个ADO.NET DataTable约束。约束的作用是用于维护数据的正确性和有效性。主要体现在两个方面,请见ADO.NET DataTable约束图所示:
其中ForeignKeyConstraint表示删除或更新某个值或行时,对主键/外键关系中一组列强制进行的操作限制。UniqueConstraint表示对一组列的限制,列中的所有值必须是唯一的。