Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对于无效的数据库状态,要引发哪个.NET异常?_C#_.net_Exception Handling - Fatal编程技术网

C# 对于无效的数据库状态,要引发哪个.NET异常?

C# 对于无效的数据库状态,要引发哪个.NET异常?,c#,.net,exception-handling,C#,.net,Exception Handling,我正在编写一些数据访问代码,我想检查数据库中潜在的“无效”数据状态。例如,我从数据库中返回一个小部件,我只希望返回一个。如果我得到两个,我想抛出一个异常。尽管引用完整性应该可以防止这种情况发生,但我不希望依赖DBA从不更改模式(为了澄清这一点,如果主键约束被删除,并且我得到了一个副本,我希望快速而清晰地打破它) 我想使用System.IO.InvalidDataException,但我不是在处理文件流,因此可能会产生误导。我最终选择了一个通用的applicationexception。有谁有更好

我正在编写一些数据访问代码,我想检查数据库中潜在的“无效”数据状态。例如,我从数据库中返回一个小部件,我只希望返回一个。如果我得到两个,我想抛出一个异常。尽管引用完整性应该可以防止这种情况发生,但我不希望依赖DBA从不更改模式(为了澄清这一点,如果主键约束被删除,并且我得到了一个副本,我希望快速而清晰地打破它)


我想使用System.IO.InvalidDataException,但我不是在处理文件流,因此可能会产生误导。我最终选择了一个通用的applicationexception。有谁有更好的主意吗?

如果找不到合适的标准异常,可以编写自定义异常

但是,你说:

即使引用完整性 我认为应该防止这种情况发生 不想依赖DBA 永远不要改变模式


当有人更改数据库模式时,更改非常大,您还必须对应用程序/数据访问代码进行一些修改…

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


只需从System.Exception继承它。

我可能会尝试使用以下选项之一:

无效约束异常
不支持异常
溢出异常


或者,继续创建我自己的:TooManyRowsException

InvalidDataException
对我来说似乎很合理:

  • 这个名字非常合适
  • <> LI>当您认为它是数据库有效的“数据流”时,描述就相当合理了。
  • 描述中没有提到文件,所以我不会担心这方面的问题
您正在有效地反序列化存储中的数据。它恰好是一个RDBMS,但这相对来说并不重要。数据无效,因此
InvalidDataException
非常适合


换句话说,如果从文件加载数据,是否会使用
InvalidDataException
?假设您会这样做,那么就抛出的异常而言,数据来自何处又有什么关系呢?

呃,我说错了。我只是想让错误很快浮出水面,因为模式是从我下面更改出来的。我知道我可以创建一个自定义异常,但我想确保我没有丢失一个好的默认值。这听起来好像约束本身是无效的-ViolatedConstraintException或ConstraintViolationException?@Jon:某种程度上,它是一个被违反的约束。在他的情况下,约束是存在的,他只是害怕数据库人员将其丢弃。我只是尝试遵循Brad Abram的建议,并希望确保我没有遗漏一个适当的内置异常:+1创建自己的异常也是我的建议-它是跟踪错误时的朋友。当涉及到应用程序或业务逻辑的边界和约束时更是如此。是的,我将使用它从文件加载数据——我同意您的逻辑。我将继续使用InvalidDataException。这可能是最合适的现有异常类。尽管@Jon Skeet使用了data stream参数,但在执行与
System.data
相关的操作时,从
System.IO
名称空间抛出异常,这让人感觉很奇怪。(当然,名称空间的具体含义不应该被高估,但它仍然传达了一个微妙的信息,即它可能不是一个正确的选择。)我认为在这种情况下,提供自定义异常类是合理的。我个人反对从非框架代码抛出本机框架异常,因为支持请求可能没有正确定向。也许一个名为ApplicationInvalidDataException的子类是合适的?这是一个有趣的观点。我当然可以看到为自定义异常设置流程/升级路径的价值。不过,我还是要给它一些。我觉得这很难接受,因为斯塔克斯给出了同样的理由。我感到惊讶的是,这种方法通常并不令人沮丧。对于使用驻留在外部名称空间或看似无关的异常,是否有任何“官方”先例或指导原则?