¿Cuál es la forma correcta de asegurar que una conexión SQL se cierre cuando se lanza una excepción?
Yo uso un patrón que se ve algo como esto a menudo. Me pregunto si esto está bien o si hay una mejor práctica que no estoy aplicando aquí.
Específicamente me estoy preguntando; en el caso de que se produzca una excepción, ¿es el código que tengo en el bloque finalmente suficiente para garantizar que la conexión se cierre correctamente?
public class SomeDataClass : IDisposable
{
private SqlConnection _conn;
//constructors and methods
private DoSomethingWithTheSqlConnection()
{
//some code excluded for brevity
try
{
using (SqlCommand cmd = new SqlCommand(SqlQuery.CountSomething, _SqlConnection))
{
_SqlConnection.Open();
countOfSomething = Convert.ToInt32(cmd.ExecuteScalar());
}
}
finally
{
//is this the best way?
if (_SqlConnection.State == ConnectionState.Closed)
_SqlConnection.Close();
}
//some code excluded for brevity
}
public Dispose()
{
_conn.Dispose();
}
}