将SqlDataReader强制转换为IDatareader最简单的方法是什么?如何将SqlDataReader转换为IDatareader
或者是更容易/可能列表<>对象转换为IDataReader的
将SqlDataReader强制转换为IDatareader最简单的方法是什么?如何将SqlDataReader转换为IDatareader
或者是更容易/可能列表<>对象转换为IDataReader的
什么是一个SqlDataReader转换为IDataReader的最简单的方法
由于SqlDataReader
实现IDataReader
,这是只是一个隐含的演员:
SqlDataReader typedReader = ...
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();
这不是真正的拳击(好吧,如果'SomeMethod'返回一个实现'IDbReader'的结构,它可能会,但似乎不太可能) – 2010-11-19 14:04:17
@Marc,抱歉的错字。我需要更多的parens。 – Brad 2010-11-19 14:06:37
parens更好,但仍然不是拳击...拳击是当一个值类型被强制到一个引用类型的容器('对象'或通过泛型不受约束的接口) – 2010-11-19 14:08:43
什么是一个 SqlDataReader对象转换为IDataReader的
不能在最简单的方法。 A SqlDataReader
CLASS不是IDataReader
interfadce。
用于铸造(分配给变量)使用
IDataReader untypedReader = typedReader;
BUT:这不是一个转换。这是一个演员。由于接口不能被实例化,所以转换为inteerface是不可能的。
'SqlDataReader'已经实现了'IDataReader'。你可以发布一些代码来显示你遇到的实际问题吗? – 2010-11-19 14:02:15