IDataReader для выполнения хранимых процедур

#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() (есть большая вероятность, что это действительно произойдет), потому что это деталь реализации.