何时使用IDataReader和何时使用DataReader?

4

我知道 IDataReader 是接口,而 DataReader 是具体类型,但我仍然不知道何时使用每个。我需要遍历数据,这可以使用 DatareaderIDataReader 两者实现。有没有更好的方法来决定何时使用接口或具体类型?


https://dev59.com/CG025IYBdhLWcg3wOzTX - Rohit Vats
4个回答

10
SqlDataReader 和所有其他数据提供程序都实现了IDataReader接口。如果您认为将来可能会从 sql 更改到 oracle 或其他什么的,那么请使用IDataReader。您可以奢侈地更改,而不必更改使用IDataReader的代码。否则,您可以使用SqlDataReader但是,如果您使用IDataReader,这将是一种解耦设计,推荐使用。

推荐的 -> 推荐的 - Atahan Ceylan

2

当您想将读取与(创建)实际读取器分离时,可以使用接口。例如,在测试或您希望准备切换数据库时。

但通常,DataReader消费代码与读取器紧密耦合,并且不需要使用接口。


1

IDataReader 是一个接口。如果你的方法接受一个 IDataReader,那么这意味着它将接受任何使用该接口的内容。这意味着你可以使用任何数据读取器。该方法将接受你的数据读取器,因为数据读取器实现了 IDataReader 接口。

这样做的优点是该方法不特定于特定类型的数据读取器。你也可以编写自己的类来实现该接口。

请参考此 LINK


1
如果您的代码不是绝对必须知道具体类型(例如,使用特定实现中唯一可用的某个方法),那么我会建议:参考接口。这使得您的代码更加灵活-例如,可以轻松添加一个性能分析装饰器(如“MiniProfiler”),该装饰器位于ADO.NET管道中。如果您已经硬编码为SqlDataReader,则无法执行此操作。这也意味着您可以完全更改后端。但坦白地说,这通常是一个巨大的决定,并涉及到重大的代码更改,因此这种情况不太“明显”。
然而,我还要说,大多数人编写涉及ADO.NET的太多管道代码。有像“dapper”这样的工具,或者更重的(但功能更丰富)ORM可以为您完成此操作,避免了许多人为错误的风险。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接