Faz .net SqlCommand.ExecuteReader estreita ligação?
-
03-07-2019 - |
Pergunta
Nesta frase:
myCommand.ExecuteReader(CommandBehavior.CloseConnection)
faz estreita ligação em caso de exceção?
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