Según mi otra pregunta aquí sobre los objetos desechables , ¿deberíamos llamar a Close () antes del final de un bloque 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
fuente
fuente
Desmontaje de SqlConnection desde el uso de .NET Reflector :
Llama a Close () dentro de Dispose ()
fuente
La palabra clave using cerrará la conexión correctamente, por lo que no se requiere la llamada adicional a Cerrar.
Del artículo de MSDN sobre agrupación de conexiones de SQL Server :
La implementación real de SqlConnection.Dispose usando .NET Reflector es la siguiente:
fuente
Usando Reflector , puede ver que el
Dispose
método deSqlConnection
realmente llamaClose()
;fuente
No, llamar a Dispose () en SqlConnection también llama a Close ().
MSDN: SqlConnection.Dispose ()
fuente
No, tener el bloque Using te llama
Dispose()
de todos modos, por lo que no es necesario que llamesClose()
.fuente
Dispose()
llamadasClose()
, no viceversa?No, no es necesario cerrar una conexión antes de llamar a Dispose.
Algunos objetos (como SQLConnections) se pueden reutilizar después de llamar a Close, pero no después de llamar a Dispose. Para otros objetos, llamar a Close es lo mismo que llamar a Dispose. (Creo que ManualResetEvent y Streams se comportan así)
fuente
No, la clase SqlConnection hereda de IDisposable, y cuando se encuentra el final del uso (para el objeto de conexión), llama automáticamente a Dispose en la clase SqlConnection.
fuente