C# DataAdapter 返回异常“未能启用约束。”
我们解释如何调试并获取关于通用异常“未能启用约束。”的更多信息。
1. 问题
在使用 C# ADO.NET DataAdapter
技术访问 SqlServer 数据库的一个应用程序开发过程中,我开始收到一个带有非常宽泛信息的异常:“未能启用约束。 一些或多行包含违反非空、唯一或外键约束的值。” 使用异常堆栈跟踪,很容易找到该异常的来源。
它是 DataAdapter
调用 FillByFilename()
方法。 但是,问题在于该消息过于宽泛,我无法确定哪个约束失败了。 因此,我需要更多信息。 不幸的是,库的创建者未能提供更多信息到 Exception
本身,因此需要进行更多的调试。
2. 解决方案
2.1. 定位方法本身
第一步是定位该方法(在设计器自动生成的文件中)的源代码。
2.2. 启用生成代码的调试
在 Visual Studio 选项中,禁用仅调试您的代码
2.3. 在生成代码中添加 Try-Catch
添加 try
-catch
代码和对 GetErrors()
方法的调用到自动生成的 DataAdapter
代码中。 在 catch
语句上设置断点。
2.4. 调试并查看错误信息
启动您的调试会话,并在调试器中检查 GetErrors()
方法的结果。 您将确切地看到哪个约束失败了。
3. 将生成代码恢复到正常状态
不要忘记将您的自动生成代码恢复到正常状态。 因为您现在正在使用 catch
语句抑制异常,只需在设计器中更改一些内容,DataAdapter
代码就会再次自动生成,您的调试更改将被覆盖。
历史
- 2022 年 7 月 15 日:初始版本