没有将SQL异常捕获为SqlException

时间:2018-06-21 17:09:25

标签: c# sql-server exception-handling

我试图向一些永久性应用程序添加一些重试功能,该应用程序由于SQL连接被远程关闭而随机崩溃。我无法调试为什么它会关闭,但是我可以看出它是暂时的,可以立即恢复。所以自然地我写了这个受保护的代码:

try 
{
    //do stuff that sometimes requires use of SQL
} 
catch (System.Data.SqlClient.SqlException sqlEx) 
{
    if (myConnection.State == System.Data.ConnectionState.Closed) 
    {
        try 
        {
            myConnection.Open();
        } 
        catch (Exception ex2)  
        {
            throw new Exception("Could not reconnect", ex2);
        }
    } 
    else 
        throw new Exception("Unhandled SQL exception", sqlEx);
} 
catch (Exception ex) 
{
    throw new Exception("Unhandled exception", ex);
}

然后我在do stuff块中放置一个断点,并手动关闭连接以测试错误处理。

但是它最后直接跳到通用Exception catch块,完全绕过SqlException上的重试捕获。

捕捉SQL异常在做什么?

我意识到,如果调用了预期的catch块,则对slqEx变量的更多分析将是适当的。

1 个答案:

答案 0 :(得分:0)

您的Sql连接器确定您的连接未打开,因此在尝试与Sql服务器通信之前会抱怨该连接。

因此,您得到的是InvalidOperationException而不是SqlException,因为Sql服务器未引发异常。实际上,根本不涉及Sql Server。

enter image description here

这与远程关闭的连接不同,后者将act differently

相关问题