如何将SqlDataReader转换/转换为IDatareader

时间:2010-11-19 14:00:10

标签: c# .net idatareader

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

或者更容易/可能转换List<>对象到IDataReader

4 个答案:

答案 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();