如何检测InvalidOperationException类型
下面是内部异常消息:
System.InvalidOperationException: ExecuteNonQuery需要一个开放和可用的连接。连接的当前状态已关闭。
我需要准确地检测这类异常来处理它。我可以知道它的HResult号码或异常代码吗?或者另一种方式?
发布于 2019-11-27 11:50:28
这段代码可能会有帮助
try
{
//your code here...
}
catch (Exception exception) when (exception.InnerException is InvalidOperationException)
{
var exceptionMessage = "ExecuteNonQuery requires an open and available Connection";
if (exception.Message.Contains(exceptionMessage) || exception.InnerException.Message.Contains(exceptionMessage))
{
//handle it...
}
}发布于 2019-11-24 16:50:26
您可以使用try/catch异常处理层次结构,以便首先捕获InvalidOperationException,并将其与其他异常类型(如泛型异常类型)分开处理。
try
{
// Normal workflow up here
}
catch (System.InvalidOperationException ioex)
{
// Handle InvalidOperationException
Console.WriteLine(ioex.StackTrace);
}
catch (System.Exception ex)
{
// Handle generic exception
Console.WriteLine(ex.StackTrace);
}但是,您的问题表明这对您不起作用,因为您提到了一个内部异常。在这种情况下,您可能需要对内部异常执行一些类型检查,如下所示:
try
{
// Normal workflow up here
}
catch (System.Exception ex)
{
if (ex.InnerException is InvalidOperationException)
{
// Handle InvalidOperationException
}
else
{
// Handle generic exception
}
Console.WriteLine(ex.StackTrace);
}发布于 2019-11-24 17:54:09
你能给我们提供更多的背景吗?这样我们就更容易回答你的问题了。
然而,如果我对你的理解是正确的,你就会尝试去处理一些内在的例外。在C# 6中,有可用的异常过滤器。有关异常筛选器的详细信息,请参阅异常过滤器。
文档还提供了一个示例。
在特定情况下,可以使用异常筛选器,如下所示:
try
{
// Do something that could cause a InvalidOperationException
}
catch (InvalidOperationException ex) when (ex.InnerException is SomeTypeOfException)
{
// Handle this type of exception
}
catch (InvalidOperationException ex) when (ex.InnerException is AnotherSomeTypeOfException)
{
// Handle this kind of exception
}https://stackoverflow.com/questions/59019614
复制相似问题