Вопрос

В этом предложении:

myCommand.ExecuteReader(CommandBehavior.CloseConnection)

закрывает ли соединение в случае исключения?

Это было полезно?

Решение

Существует множество способов ошибочного выполнения команды.

В конце концов, это метод Close для чтения данных, который закрывает соединение при условии, что ничего не пошло не так раньше.

Если в ExecuteReader или в каком-либо из его вызванных методов возникает исключение, то перед тем, как будет создан фактический объект DataReader, нет, соединение не будет закрыто.

В случае исключения я бы не стал доверять закрытию соединения.

Другие советы

Самый безопасный способ сделать " нормальный " запрос

using (var conn = new SqlConnection("..."))
{
    conn.Open();
    using (var cmd = conn.CreateCommand())
    {
        cmd.CommandText = "...";
        using (var reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                // ...
            }
        }
    }
}

Исключения могут быть обнаружены вне этого кода.

Это зависит от того, где происходит исключение!

Если вы правильно структурируете свой try catch, все будет хорошо.

Например:

SqlCommand myCommand = new SqlCommand();

try
{
   myCommand.dostuff();
}
catch(Exception ex)
{
  // display error message
}
finally
{
  myCommand.ExecuteReader(CommandBehavior.CloseConnection);
}

Если строка myCommand.ExecuteReader (CommandBehavior.CloseConnection) завершится неудачно (возможно, база данных отключена?), то соединение не может быть закрыто программным способом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top