违反约束时是不是可以获取行的值?
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/… 非常好的和简单的想法。遇到异常后,最好牺牲一点性能并重复操作,慢慢收集数据,以便更快地隔离问题。以上是关于违反约束时是不是可以获取行的值?的主要内容,如果未能解决你的问题,请参考以下文章