Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Исключения и высвобождение ресурсов

8.2K
16 января 2009 года
bagie2
299 / / 26.10.2008
У меня есть самодельная сборка, в которой реализованы удобные мне классы для работы с доступом к различным источникам данных. Начинал писать давно, еще когда только начал изучать C#. Поглядел тут код и ужаснулся.

Есть некоторый метод и в нем используется, допустим, SqlDataReader и примерно такой код:
Код:
...
SqlDataReader dataReader = null;

try
{
   dataReader = dbCommand.ExecuteReader();
   
   ...
   
   dataReader.Close();
}
catch (SomeException ex)
{
   if (dataReader is object)
      dataReader.Close();
   ...
}
...


Вопрос. Как лучше переделать: через try-finally, чтобы закрывать dataReader или с использованием using (dataReader = dbCommand.ExecuteReader()) {} или вообще не принципиально и может быть оставить так как есть? Просто я не так уж и давно пишу на C# и все тонкости могу и не знать.

И еще вопрос. Когда я использую using, то если вываливается исключение, то dataReader будет закрыт, т.е. Dispose() для него сработает?
12K
16 января 2009 года
lifs
163 / / 06.09.2007
Лучше так:
Код:
SqlDataReader dataReader = null;
try
{
    dataReader = dbCommand.ExecuteReader();
    ...
}
catch( ... ex )
{
    ...
}
finally
{
    if (dataReader != null)
        dataReader.Close();
}


Когда используется using, гарантируется, что будет вызван метод Dispose(). Фактически компилятор превращает в блок try { ... } finally { ... }.

Для закрытия SqlDataReader'а следует использовать метод Close(), а для проверки на null:
 
Код:
if (dataReader != null)

а не
 
Код:
if (dataReader is object)

(если именно это имелось ввиду в этой строчке).
8.2K
16 января 2009 года
bagie2
299 / / 26.10.2008
Спасибо, всё подтвердилось. А насчет "is object" - это абсолютно то же самое что "!= null", просто мне так больше нравится :)
8.2K
16 января 2009 года
bagie2
299 / / 26.10.2008
Выложил сорцы того, что делал. Может понадобится кому-нибудь.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог