目录
1. 问题
在一个应用程序的工作中,使用C# ADO.NET DataAdapter技术访问SqlServer数据库,我开始收到一个异常,其中包含一条非常广泛的消息:“无法启用约束。一行或多行包含违反非空值、唯一值或外键约束的值。使用Exception StackTrace,很容易找到该异常的来源。
它是FillByFilename()方法的DataAdapter调用。但是,问题是信息很广泛,我没有看到哪些约束失败了。所以,我需要更多信息。不幸的是,库创建者未能在Exception自身中提供更多信息,因此需要进行更多的调试。
2. 解决方案
2.1. 定位方法本身
第一步是找到该方法的源代码(在设计器自动生成的文件中)。
2.2. 为生成的代码启用调试
在Visual Studio选项中,仅禁用代码的调试:
2.3. 将try-catch添加到生成的代码中
将try-catch代码和调用GetErrors()方法添加到自动生成的DataAdaptercatch代码。在语句上设置断点。
2.4. 调试并查看错误信息
启动调试会话并在调试器中签入GetErrors()方法的结果。您将确切地看到哪个约束失败了。
3. 将生成的代码恢复到正常状态
不要忘记将自动生成的代码恢复到正常状态。因为您现在正在使用你的catch语句抑制异常,所以只需在设计器中更改某些内容,DataAdapter代码将再次自动生成,并且您的调试更改将被覆盖。
https://www.codeproject.com/Tips/5337324/Csharp-DataAdapter-returning-Exception-Failed-to-e