SQL 异常未作为 SqlException 被捕获

SQL Exception is not being caught as a SqlException

我正在尝试为我观察到的持久性应用程序添加一些重试功能,该应用程序由于 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块中打了一个断点,并手动关闭了连接以测试错误处理。

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

捕获 SQL 异常我做错了什么?

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

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

因此您得到的是 InvalidOperationException 而不是 SqlException,因为异常不是由 Sql 服务器抛出的。事实上 Sql 服务器根本没有参与。

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