我在这里拔头发。我有一个具有UNIQUE键(IX_tblTable)的表,唯一键位于列号上。我正在从Web解析一些数据并将其存储在表中。我最新的网络数据集包含数据库中未包含的数字。所以我从网站获取数据并且我获得的所有数据都是唯一的,没有重复数据,并且返回的列表中的数字不在数据库中。
每次我尝试更新数据库时都会遇到此错误,捕获错误的最佳方法是查看哪个数字导致错误。我存储的所有内容都返回到对象列表中,当它完成运行时,我有131条记录需要插入,我无法看到哪一个抛出了这个错误。捕获它的麻烦方法是什么?
编辑:我正在使用sql server 2005,在C#中使用Linq2SQL。由于专有原因,我目前无法发布任何c#代码......答案 0 :(得分:3)
你能暂时禁用你的约束,看看有什么重复保存吗?稍后您可以删除重复项并重新启用它。
答案 1 :(得分:1)
创建没有主键或唯一性约束的表的副本(具有列,而不是主列)。修改您的代码以插入该表。运行。选择具有多个副本的值。
答案 2 :(得分:0)
您可以使用名为binary search的算法来查找“错误”数据。
假设您有131行INSERT INTO ... VALUES(...)
并且想要捕获导致错误的那一行,您可以将131行划分为两个pices(前66和后65)。现在单独运行66和65个INSERT,并查看哪个引发了错误。继续“分开尝试”直到你到达一条线。 (在最坏的情况下,这是10次尝试。)
答案 3 :(得分:0)
您是否在控制datacontext的生命周期?
Insert 5
SubmitChanges (record inserted, no exception)
Insert 5
SubmitChanges (duplicateKeyException on 5)
Insert 6
SubmitChanges (duplicateKeyException on 5)
答案 4 :(得分:0)
为什么不使用Begin Try ... End Try .. Begin Catch ... End Catch ...在SQL存储过程中(我假设您使用SP插入数据)来捕获导致唯一约束的Row违反?