Оператор using
следует использовать каждый раз, когда вы создаете экземпляр класса, который реализует IDisposable
в области действия блока . Это гарантирует, что метод Dispose()
будет вызван в этом экземпляре, вне зависимости от того, выдано ли исключение.
В частности, ваш код перехватывает только управляемые исключения, а затем уничтожает кадр стека, создавая новое исключение, а не выбрасывая существующее.
Правильный способ сделать это:
using (SqlConnection cn = new SqlConnection(ConfigurationManager.AppSettings["T3"])) {
cn.Open();
using (SqlTransaction tr = cn.BeginTransaction()) {
//some code
tr.Commit();
}
}
Обратите внимание, что если в вашем классе есть экземпляры-члены типов, которые реализуют IDisposable
, то ваш класс должен сам реализовать IDisposable
и избавиться от этих членов во время своего собственного вызова Dispose()
.