I use a pattern that looks something like this often. I'm wondering if this is alright or if there is a best practice that I am not applying here.
Specifically I'm wondering; in the case that an exception is thrown is the code that I have in the finally block enough to ensure that the connection is closed appropriately?
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();
    }
}
 
     
     
     
     
     
     
     
     
     
     
     
    