我收到此错误,但只是偶尔。 99.9%的时间工作正常:
无法启用约束。一行或多行包含违反非null,唯一或外键约束的值。
有没有人知道原因是什么?我只使用该数据表进行查看而不是更新,因此可以轻易地以某种方式关闭所有约束吗?
答案 0 :(得分:3)
在填写DataTable之前将DataSet.EnforceConstraints设置为false
答案 1 :(得分:2)
这通常发生在数据集上的架构强制执行数据库不存在的情况时。
Visual Studio将自动读取架构并尝试在数据集上设置一些主键,但如果您使用的视图可能会返回多行,则会失败。通过删除设计器中的约束,很容易从DataSet本身中删除这些约束。
检查以确保您的数据集在可能有两个具有相同键的行的情况下不强制执行主键,例如在将两个表连接在一起的视图中,因此复制父表中的行。默认情况下,VS会尝试创建父表的主键作为数据集的唯一约束,但视图本身不会强制执行此类约束。
答案 2 :(得分:0)
如果您使用XSD DataSet定义架构并且数据库中增加了可变长度字段(varchar,varbinary等)的最大长度但未重新生成XSD,则也会出现此错误
就我而言,我有一个varchar(100)
数据库字段,文本值长度为60个字符。 XSD期望此字段的最大长度为50(您可以在Designer.cs文件的InitClass()
方法中看到此内容)。当加载此记录时,我收到了"无法启用约束"错误信息。更新记录以将字段减少到50以下可以删除错误。