#c# #using #idatareader
#c# #используя #idatareader
Вопрос:
Я использую IDataReader для получения данных из базы данных с помощью хранимой процедуры. т.е. что-то вроде этого
using (IDataReader Reader = SqlHelper.ExecuteReader(ConnectionString, "StoredProc1", sqlParam))
{
while (Reader.Read())
{
}
}
В таком случае требуется ли закрывать программу чтения вручную? я сомневаюсь, что, поскольку мы используем директиву Using, после выполнения она автоматически закроет программу чтения?.
Спасибо,
Махеш
Ответ №1:
Поскольку вы используете using
, а возвращенный reader реализует IDisposable
, Dispose()
будет вызван автоматически. Предполагая, что Dispose()
это правильно реализовано (и это так), он сделает все необходимое, чтобы убедиться, что объект может быть безопасно удален. Если это требует вызова Close()
, будет вызван Close; Или внутренний эквивалент, о котором нам не нужно знать.
Комментарии:
1. Таким образом, он автоматически закроет программу чтения () и Dispose(). т.Е. поэтому нам не пришлось беспокоиться об этом. я прав?
2. @mahesh, он будет вызывать
Dispose()
, он не будет вызыватьClose()
. Но Dispose сделает все , что необходимо для правильного освобождения всех используемых ресурсов, поэтому так или иначе он будет делать то, чтоClose()
делает. Я не хочу говорить, чтоDispose()
собирается вызыватьClose()
(есть большая вероятность, что это действительно произойдет), потому что это деталь реализации.