违反约束时是不是可以获取行的值?

Posted

技术标签:

【中文标题】违反约束时是不是可以获取行的值?【英文标题】:Is it possible to get the values of a row when having constraints violation?违反约束时是否可以获取行的值? 【发布时间】:2016-02-03 15:59:44 【问题描述】:

在批量插入数千条记录时,我收到异常消息“外键约束违规”。

不幸的是,消息没有提供错误数据记录的线索。

是否有任何技巧可以获取有关问题的更详细信息?否则调试此类问题真的很痛苦。

【问题讨论】:

你在使用实体框架吗? 不应将数据直接导入目标表。您应该将数据导入临时表,然后您可以查询坏行并只插入好行。 命名约束也是一个好习惯,这样您就可以知道哪些外键被违反了。 @Aaron 不,只是批量插入,纯 ado.net @Rumbleweed 他们被命名了。总比没有好,但还是不要太多:) 【参考方案1】:

我相信您可以为 OnRowUpdated 事件添加一个处理程序,您可以在其中检查错误并查看有关特定行的信息。

请参阅此答案以获取示例作为起点: How to track which row update failed in batch update

对于 SqlBulkCopy,请查看此 CodeProject 文章: http://www.codeproject.com/Articles/387465/Retrieving-failed-records-after-an-SqlBulkCopy-exc

【讨论】:

唉,SqlBulkCopy 类没有提供这个事件。 啊,我现在明白了。您是否已经查看过这个人的 CodeProject 文章? codeproject.com/Articles/387465/… 非常好的和简单的想法。遇到异常后,最好牺牲一点性能并重复操作,慢慢收集数据,以便更快地隔离问题。

以上是关于违反约束时是不是可以获取行的值?的主要内容,如果未能解决你的问题,请参考以下文章

违反约束时显示自定义消息 PL/SQL

填充行的其余部分/避免违反空约束

获取gridview选中行的数据

更新时SQL违反主键约束

vb中如何获取datagrid选中行的值?

无法启用约束。一行或多行包含违反非空、唯一或外键约束的值