Как правильно обеспечить закрытие соединения SQL при возникновении исключения?

Я часто использую шаблон, который выглядит примерно так. Мне интересно, все ли в порядке или есть лучшая практика, которую я здесь не применяю.

Конкретно мне интересно; в случае, если выброшено исключение, достаточно ли кода, который у меня есть в блоке finally, чтобы обеспечить надлежащее закрытие соединения?

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();
    }
}

Ответы на вопрос(9)

Ваш ответ на вопрос