У меня есть метод («GetDataReader», давайте его назовем), который возвращает SqlDataReader. Он находится внутри класса Singleton DataFactory, который поддерживает постоянное соединение с базой данных.
Проблема в том, что после возврата DataReader все еще «подключен» к объекту Connection в моей DataFactory. Итак, я должен убедиться, что код, который вызывает GetDataReader, затем вызывает Close () для DataReader, который возвращается, в противном случае он «блокирует» соединение следующим образом:
Уже есть открытый DataReader, связанный с этой командой, который должен быть закрыт первым.
Как я могу "отсоединить" DataReader перед тем, как отправить его обратно из GetDataReader? Или это, или клонировать его и отправить обратно клон? Я не хочу, чтобы вызывающий код всегда явно закрывал его.
Здесь должна быть лучшая практика.
Обновление:
Спасибо всем за ваш вклад. Суть в том, что мне нужно отказаться от привычки использовать DataReaders и переключиться на DataTables. Они намного более управляемы.
Также, спасибо за примечание о пуле соединений. Я знал об этом, но просто не соединил два и два и понял, что заново изобретаю колесо.