将SqlDataReader强制转换为IDatareader的最简单方法是什么。
或者更容易/可能转换List<>对象到IDataReader
答案 0 :(得分:9)
将SqlDataReader转换为IDatareader
的最简单方法是什么?
由于SqlDataReader
实现IDataReader
,这只是一个隐式转换:
SqlDataReader typedReader = ...
IDataReader untypedReader = typedReader;
答案 1 :(得分:3)
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>
的访问,但这样做不合适并且工作量很大。
答案 2 :(得分:3)
转换a的最简单方法是什么? SqlDataReader到IDatareader
你做不到。 SqlDataReader
CLASS不是IDataReader
interfadce。
对于强制转换(赋值给变量),请使用
IDataReader untypedReader = typedReader;
但是:这不是转换。这是一个演员。由于接口无法实例化,因此无法定义到接口的转换。
答案 3 :(得分:1)
或者你可以直接投射它,但正如已经说过的那样,除非你创建或使用通用接口,否则它基本上是不必要的,因为IDbDataReader
的所有属性和方法都可用于SqlDataReader
。
((IDbDataReader)typedReader).SomeMethod();