建立Unique约束有两种方式:
(1) UniqueConstraint uniqueContact=new UniqueConstraine(ds.Tables[0].Columns[0]);
ds.Tables[0].Constraints.Add(uniqueContact);
(2) ds.Tables[0].Columns[0].AlowDbNull=false;
ds.Tables[0].Columns[0].Unique=true;
二.ForeignKeyConstraint外键约束
除了Unique约束外还有外键约束:ForengnKeyConstraint
外键约束建立完成后要加到子表的Constraints集合中,按理解来说,外键约束主要是对子表的数据完整性的约束,所以加到子表中的Constraints集合中是可以理解的.另外,在在子表中建立外键约束时,主表的父字段也会自动增加Unique的唯一性约束.
三.约束的更新规则
更新的规则有三种,它们都是应用在ForeignKeyConstraint上的属性.
(1) AcceptRejectRule:在DataTable或者DataRow调用AcceptChanges或RejectChanges时会引发这个规则的实施.
它有None和CasCade,前者不级联更新,但是违返规则时将引发异常.后者自动更新子表,如果更新则更新子表,如果删除将删除子表数据.
(2)DeleteRule和UpdateRule.分别有四个值的枚举,None,Cascade,SetNull,SetDefault,前二者同上,后二者自动设为Null或Default的值.
注:如果(2)的设定与(1)不符,例如将AcceptRejectRule设为Cascade,而UpdateRule设备SetNull,这将后引发不可预知的后果.因为后者已将子表设为Null,而前者就不做任何操作了.
更细致的控制我认为是应该将AcceptRejectRule设为None,而具体设定DeleteRule和UpdateRule,Cascade是UpdateRule和DeleteRule的默认值.None是AcceptRejectRule的默认值.
MSDN上的例子:
private void CreateConstraint(DataSet myDataSet, string table1, string table2,
string column1, string column2){
// Declare parent column and child column variables.
DataColumn parentColumn;
DataColumn childColumn;
ForeignKeyConstraint myForeignKeyConstraint;
// Set parent and child column variables.
parentColumn = myDataSet.Tables[table1].Columns[column1];
childColumn = myDataSet.Tables[table2].Columns[column2];
myForeignKeyConstraint = new ForeignKeyConstraint
("SupplierForeignKeyConstraint", parentColumn, childColumn);
// Set null values when a value is deleted.
myForeignKeyConstraint.DeleteRule = Rule.SetNull;
myForeignKeyConstraint.UpdateRule = Rule.Cascade;
myForeignKeyConstraint.AcceptRejectRule = AcceptRejectRule.Cascade;
// Add the constraint, and set EnforceConstraints to true.
myDataSet.Tables[table1].Constraints.Add(myForeignKeyConstraint);
myDataSet.EnforceConstraints = true;
}