什么是将SqlDataReader转换为IDataReader的最简单方法?
或者,将List<>对象转换为IDataReader是否更容易/可能?
或者,将List<>对象转换为IDataReader是否更容易/可能?
SqlDataReader typedReader = ...
IDataReader untypedReader = typedReader;
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>
的访问,但这将不是很适合,需要相当多的工作。如何最简单地将SqlDataReader转换为IDataReader
不行。SqlDataReader类不是IDataReader接口。
要进行强制类型转换(赋值给变量),使用
IDataReader untypedReader = typedReader;
或者你可以直接进行类型转换,但正如已经提到的那样,这在大多数情况下是不必要的,除非你正在创建或使用一个通用接口,因为所有 IDbDataReader
的属性和方法都可以在 SqlDataReader
中使用。
((IDbDataReader)typedReader).SomeMethod();
SomeMethod
返回实现了IDbReader
接口的结构体,则可能是,但这似乎不太可能)。 - Marc Gravellobject
或未通过泛型约束的接口)。 - Marc Gravellcast
而不是box
了。谢谢!这样更合适吗? - Brad
SqlDataReader
已经实现了IDataReader
接口。您能否贴一些代码来展示您所遇到的实际问题? - Graham Clark