将 SqlDataReader 转换为 IDatareader 的最简单方法是什么。
或者将 List<> 对象转换为 IDataReader 是否更容易/可能
将 SqlDataReader 转换为 IDatareader 的最简单方法是什么。
或者将 List<> 对象转换为 IDataReader 是否更容易/可能
将 SqlDataReader 转换为 IDatareader 的最简单方法是什么
由于SqlDataReader
implements IDataReader
,这只是一个隐式转换:
SqlDataReader typedReader = ...
IDataReader untypedReader = typedReader;
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>
,但这不合适并且需要大量工作。
将 SqlDataReader 转换为 IDatareader 的最简单方法是什么
你不能。SqlDataReader
CLASS 不是IDataReader
接口。
对于强制转换(分配给变量)使用
IDataReader untypedReader = typedReader;
但是:这不是转换。这是一个演员表。由于无法实例化接口,因此无法根据定义转换为接口。
或者您可以直接转换它,但正如前面所述,除非您创建或使用通用接口,否则它在很大程度上是不必要的,IDbDataReader
因为SqlDataReader
.
((IDbDataReader)typedReader).SomeMethod();