Por minha outra pergunta aqui sobre objetos descartáveis , devemos chamar Close () antes do final de um bloco de uso?
using (SqlConnection connection = new SqlConnection())
using (SqlCommand command = new SqlCommand())
{
command.CommandText = "INSERT INTO YourMom (Amount) VALUES (1)";
command.CommandType = System.Data.CommandType.Text;
connection.Open();
command.ExecuteNonQuery();
// Is this call necessary?
connection.Close();
}
c#
asp.net
using
sqlconnection
sqlcommand
John Bubriski
fonte
fonte
Desmontagem de SqlConnection usando .NET Reflector :
Ele chama Close () dentro de Dispose ()
fonte
A palavra-chave using fechará a conexão corretamente, de forma que a chamada extra para Fechar não é necessária.
Do artigo MSDN sobre pool de conexão do SQL Server :
A implementação real de SqlConnection.Dispose usando .NET Reflector é a seguinte:
fonte
Usando o Reflector , você pode ver que o
Dispose
método deSqlConnection
realmente chamaClose()
;fonte
Não, chamar Dispose () em SqlConnection também chama Close ().
MSDN - SqlConnection.Dispose ()
fonte
Não, ter o bloco Using chama
Dispose()
para você de qualquer maneira, então não há necessidade de chamarClose()
.fonte
Dispose()
chamadasClose()
, não vice-versa?Não, não é necessário fechar uma conexão antes de chamar Dispose.
Alguns objetos, (como SQLConnections) podem ser reutilizados após a chamada de Close, mas não após a chamada de Dispose. Para outros objetos, chamar Close é o mesmo que chamar Dispose. (ManualResetEvent e Streams, acho que se comportam assim)
fonte
Não, a classe SqlConnection herda de IDisposable e, quando o fim do uso (para o objeto de conexão) é encontrado, ele chama automaticamente Dispose na classe SqlConnection.
fonte