SqlClient SqlException не обнаружен

У меня есть рабочая роль Azure, выполняющая простой выбор в базе данных SQL Azure. Редко возникает следующее исключение SqlException.

Бревно

Базовый провайдер не удалось открыть. Внутреннее исключение: истекло время ожидания. Время ожидания истекло до завершения операции или сервер не отвечает. Тип исключения: System.Data.SqlClient.SqlException

Исключение не перехватывается как SqlException. Он улавливается универсальным обработчиком исключений. Любые предложения относительно того, почему это должно быть?

try{
}
catch(System.Data.SqlClient.SqlException sqlExcep)
{
}
catch(Exception genericExcep)
{
    **//The exception is caught as a generic exception**
}

person user275157    schedule 30.08.2012    source источник


Ответы (3)


Среда базы данных SQL - это уровень маршрутизаторов и прокси-серверов, которые обрабатывают балансировку сетевой нагрузки и управление ресурсами. Если сама база данных SQL не истекла по таймауту, то могло произойти что-то еще в середине (хотя обычно это бывает редко).

Я обычно обрабатываю ошибки IOException и рассматриваю некоторые из них как временную ошибку. Какой тип исключения вы на самом деле получаете?

Вы пробовали реализовать блок приложения для обработки временных сбоев? http://msdn.microsoft.com/en-us/library/hh680934(v=pandp.50)

Эрве

person Herve Roggero    schedule 06.09.2012
comment
Я не реализовал обработку неисправностей. При определенных ошибках я просто позволяю рабочей роли повторить попытку. Если это общее исключение, я выхожу из строя и останавливаю работника (после отправки мне предупреждения). Вот почему мне нужно было перехватить исключение, связанное с SQL. Я полагаю, что блоки обработки переходных неисправностей должны решить эту проблему. Спасибо! - person user275157; 10.09.2012

Похоже, что это внутреннее исключение, а не фактическое исключение, которое вы поймали. Какой тип внешнего исключения? Единственное, что вы можете сделать, это поймать любой тип пойманного исключения, а затем проверить внутреннее исключение:

try
{
    // Stuff
}
catch (Exception exc)
{
    if (exc.InnerException is System.Data.SqlClient.SqlException)
    {
        var sqlException = exc.InnerException as System.Data.SqlClient.SqlException;

        // Do stuff with the error.
    }
}

Мораль этой истории в том, что вы не можете явно уловить внутреннее исключение :(

person Gromer    schedule 06.09.2012

Попробуйте Microsoft.Data.SqlClient.SqlException вместо System.Data.SqlClient.SqlException

        catch (Microsoft.Data.SqlClient.SqlException ex)
        {

        }
person Lakmal    schedule 10.07.2020