为无效的数据库状态抛出哪个.NET异常?

jsl*_*tts 8 .net c# exception-handling

我正在编写一些数据访问代码,我想检查数据库中潜在的"无效"数据状态.例如,我从数据库中返回一个小部件,我只期望一个.如果我得到两个,我想抛出异常.即使参照完整性应该防止这种情况发生,我也不希望依赖于DBA永远不会改变模式(为了澄清这一点,如果删除了主键约束并且我得到了一个欺骗,我想快速而清楚地打破).

我想使用System.IO.InvalidDataException,除了我没有处理文件流,所以它会产生误导.我最终得到了一个通用的applicationexception.谁有更好的主意?

Jon*_*eet 16

InvalidDataException 对我来说似乎很合理:

  • 这个名字非常适合
  • 当您认为它实际上是数据库中的数据"流"时,描述非常合理
  • 说明中没有任何内容提到文件,所以我不会担心这方面的事情

您正在有效地反序列化商店中的数据.它碰巧是一个RDBMS,但这相对不重要.数据无效,非常InvalidDataException适合.

换句话说 - 如果你从文件加载数据,你会使用InvalidDataException吗?假设你会这样做,为什么数据来自何处,就抛出的异常而言?

  • 这可能确实是最合适的现有异常类.感觉很奇怪IMHO - 尽管@Jon Skeet的数据流参数 - 当您执行与System.Data`相关的事情时,从`System.IO`命名空间抛出异常.(当然,名称空间的具体含义不应该被高估,但它仍然传达了一个微妙的信息,它可能不是*相当正确的抛出.)我认为在这种情况下,提供自定义异常类将是有道理的. (2认同)

小智 6

如果您需要一个能够准确描述您正在处理的情况的异常,为什么不自己做例外?

只需从System.Exception继承它.