¿El siguiente código deja la conexión abierta si hay una excepción?Forma correcta de cerrar la conexión de la base de datos en caso de excepción
Estoy usando una base de datos de edición compacta Microsoft SQL.
try
{
SqlCeConnection conn = new SqlCeConnection(ConnectionString);
conn.Open();
using (SqlCeCommand cmd =
new SqlCeCommand("SELECT stuff FROM SomeTable", conn))
{
// do some stuff
}
conn.Close();
}
catch (Exception ex)
{
ExceptionManager.HandleException(ex);
}
Sin duda, una forma mejor sería declarar un objeto de conexión antes de la prueba, establecer una conexión dentro del bloque try y cerrarla en un bloque finally?
SqlCeConnection conn = null;
try
{
conn = new SqlCeConnection(ConnectionString);
conn.Open();
using (SqlCeCommand cmd =
new SqlCeCommand("SELECT stuff FROM SomeTable", conn))
{
// do some stuff
}
}
catch (Exception ex)
{
ExceptionManager.HandleException(ex);
}
finally
{
if(conn != null) conn.Close();
}
Todavía no puedo envolver mi cabeza alrededor de esto. De la referencia: "Si el SqlCeConnection está fuera del alcance, no está cerrado. Debe cerrar explícitamente la conexión llamando a Close o Dispose". En su primer ejemplo, no "cierra explícitamente la conexión". –
Al usar la instrucción 'using', llama al método' Dispose' en el objeto que se está utilizando, que a su vez llamaría al método 'Close', en el caso de' SqlCeConnection'. Utilice una herramienta como ILSpy para ver qué código se ejecuta cuando se invoca 'Dispose' en' SqlCeConnection'. Consulte la documentación [aquí] (http://msdn.microsoft.com/en-us/library/bb300654%28v=vs.100%29.aspx). – shahkalpesh