6

将 SqlDataReader 转换为 IDatareader 的最简单方法是什么。

或者将 List<> 对象转换为 IDataReader 是否更容易/可能

4

4 回答 4

9

将 SqlDataReader 转换为 IDatareader 的最简单方法是什么

由于SqlDataReaderimplements IDataReader,这只是一个隐式转换:

SqlDataReader typedReader = ...
IDataReader untypedReader = typedReader;
于 2010-11-19T14:01:37.210 回答
3

ASqlDataReader 一个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>and IDataReader:除了可枚举之外,它们还做了非常不同的事情。最显着的区别是数据读取器提供对列数据的访问(主要是因为它实现了IDataRecord接口),这对大多数列表没有意义。

可以实现一个适配器,通过数据读取器接口提供对 a 的访问List<T>,但这不合适并且需要大量工作。

于 2010-11-19T14:02:56.370 回答
3

将 SqlDataReader 转换为 IDatareader 的最简单方法是什么

你不能。SqlDataReaderCLASS 不是IDataReader接口。

对于强制转换(分配给变量)使用

IDataReader untypedReader = typedReader; 

但是:这不是转换。这是一个演员表。由于无法实例化接口,因此无法根据定义转换为接口。

于 2010-11-19T14:03:06.133 回答
1

或者您可以直接转换它,但正如前面所述,除非您创建或使用通用接口,否则它在很大程度上是不必要的,IDbDataReader因为SqlDataReader.

((IDbDataReader)typedReader).SomeMethod();
于 2010-11-19T14:02:57.630 回答