如何将SqlDataReader转换/转换为IDatareader

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

要回复问题请先登录注册