Как конвертировать / приводить SqlDataReader к IDatareader - PullRequest
6 голосов
/ 19 ноября 2010

Какой самый простой способ привести SqlDataReader к IDatareader.

Или проще / возможно преобразовать объект List <> в IDataReader

Ответы [ 4 ]

9 голосов
/ 19 ноября 2010

Какой самый простой способ конвертировать SqlDataReader в IDatareader

Поскольку SqlDataReader реализует IDataReader, это просто неявное приведение:

SqlDataReader typedReader = ...
IDataReader untypedReader = typedReader;
3 голосов
/ 19 ноября 2010

Какой самый простой способ конвертировать SqlDataReader для IDatareader

Вы не можете. SqlDataReader CLASS не является IDataReader интерфейсом.

Для приведения (присвоить переменной) используйте

IDataReader untypedReader = typedReader; 

НО: это НЕ конверсия. Это актерский состав. Преобразование в inteerface по определению невозможно, поскольку интерфейсы не могут быть созданы.

3 голосов
/ 19 ноября 2010

A SqlDataReader - это и IDataReader (он реализует интерфейс), так что вам вообще не нужно его преобразовывать.Везде, где ваш код ожидает IDataReader, вы можете использовать реализацию Sql.

// Given a method with this signature
public void ProcessData(IDataReader reader);

// You can do this
SqlDataReader sqlReader = command.ExecuteReader();
ProcessData(sqlReader);

Что касается List<T> и IDataReader: помимо перечисления они делают совершенно разные вещи.Наиболее заметным отличием является то, что устройства чтения данных предоставляют доступ к столбчатым данным (главным образом потому, что он реализует интерфейс IDataRecord), что не имеет смысла для большинства списков.

Вы могли бы внедрить адаптер, обеспечивающий доступ к List<T> через интерфейс считывателя данных, но это было бы плохо подходит и требовало значительного объема работы.

1 голос
/ 19 ноября 2010

Или вы можете просто разыграть его, но, как уже было сказано, в большинстве случаев это не нужно, если вы не создаете или не используете универсальный интерфейс, поскольку все свойства и методы IDbDataReader доступны для SqlDataReader.

((IDbDataReader)typedReader).SomeMethod();
...