2010-11-19 28 views
6

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

或者是更容易/可能列表<>对象转换为IDataReader的

+3

'SqlDataReader'已经实现了'IDataReader'。你可以发布一些代码来显示你遇到的实际问题吗? – 2010-11-19 14:02:15

回答

9

什么是一个SqlDataReader转换为IDataReader的最简单的方法

由于SqlDataReader实现IDataReader,这是只是一个隐含的演员:

SqlDataReader typedReader = ... 
IDataReader untypedReader = typedReader; 
3

A SqlDataReaderIDataReader(它实现了接口),所以你根本不需要转换它。你的代码在任何地方都可以使用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>通过数据读卡器接口适配器,但是这将是一个贫穷的配合和工作相当数量。

1

或者您也可以投它,但如前所述,除非您创建或使用通用界面,否则很大程度上是不必要的,因为IDbDataReader的所有属性和方法都可用于SqlDataReader

((IDbDataReader)typedReader).SomeMethod(); 
+2

这不是真正的拳击(好吧,如果'SomeMethod'返回一个实现'IDbReader'的结构,它可能会,但似乎不太可能) – 2010-11-19 14:04:17

+0

@Marc,抱歉的错字。我需要更多的parens。 – Brad 2010-11-19 14:06:37

+1

parens更好,但仍然不是拳击...拳击是当一个值类型被强制到一个引用类型的容器('对象'或通过泛型不受约束的接口) – 2010-11-19 14:08:43

3

什么是一个 SqlDataReader对象转换为IDataReader的

不能在最简单的方法。 A SqlDataReader CLASS不是IDataReader interfadce。

用于铸造(分配给变量)使用

IDataReader untypedReader = typedReader; 

BUT:这不是一个转换。这是一个演员。由于接口不能被实例化,所以转换为inteerface是不可能的。

相关问题