Pergunta

Nesta frase:

myCommand.ExecuteReader(CommandBehavior.CloseConnection)

faz estreita ligação em caso de exceção?

Foi útil?

Solução

Existem muitas maneiras que o comando pode dar errado.

Em última análise, é o método Close do leitor de dados que irá fechar a conexão, desde que nada tem de errado ido antes.

Se houver uma excepção que ocorre dentro ExecuteReader ou qualquer dos seus chamados métodos, antes de o objecto DataReader real é construída, então não, a ligação não será fechado.

Em caso de uma exceção, eu não confiar nele para fechar a conexão.

Outras dicas

A maneira mais segura de fazer uma consulta "normal" é

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

Exceções podem ser capturados fora deste código.

Depende de onde ocorre a exceção!

Se você estruturar seu try catch corretamente, ele vai ficar bem.

Por exemplo:

SqlCommand myCommand = new SqlCommand();

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

Se a linha:. MyCommand.ExecuteReader (CommandBehavior.CloseConnection) falhar (? Talvez o banco de dados tem ido para baixo), em seguida, a conexão não pode ser fechado programaticamente

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top