【发布时间】:2008-10-01 01:20:21
【问题描述】:
我收到此错误,但只是非常偶尔。 99.9% 的时间都可以正常工作:
未能启用约束。一行或多行包含违反非空、唯一或外键约束的值。
有人知道原因可能是什么吗?我只使用该数据表来查看而不是更新,所以是否可以以某种方式轻松关闭所有约束?
【问题讨论】:
标签: .net sql-server database
我收到此错误,但只是非常偶尔。 99.9% 的时间都可以正常工作:
未能启用约束。一行或多行包含违反非空、唯一或外键约束的值。
有人知道原因可能是什么吗?我只使用该数据表来查看而不是更新,所以是否可以以某种方式轻松关闭所有约束?
【问题讨论】:
标签: .net sql-server database
在填充数据表之前将DataSet.EnforceConstraints设置为false
【讨论】:
这通常发生在您的数据集上的架构强制执行您的数据库未执行的某些操作时。
Visual Studio 将自动读取架构并尝试在您的数据集上设置一些主键,但如果您使用的视图可能会返回多行,它将失败。通过删除设计器中的约束,很容易从 DataSet 本身中删除这些约束。
在您可能有两行具有相同键的情况下检查以确保您的数据集没有强制使用主键,例如在将两个表连接在一起并因此复制父表中的行的视图中。默认情况下,VS 会尝试创建父表的主键作为数据集的唯一约束,但视图本身不会强制执行此类约束。
【讨论】:
如果您使用 XSD 数据集定义架构并且数据库中可变长度字段(varchar、varbinary 等)的最大长度增加但 XSD 未重新生成,也会出现此错误。
就我而言,我有一个 varchar(100) 数据库字段,其文本值长度为 60 个字符。 XSD 预计该字段的最大长度为 50(您可以在 Designer.cs 文件的 InitClass() 方法中看到这一点)。加载此记录时,我收到“无法启用约束”错误消息。更新记录以减少低于 50 的字段消除了错误。
【讨论】: