何时使用IDataReader以及何时使用DataReader

本文关键字:何时使 DataReader IDataReader | 更新日期: 2023-09-27 18:23:57

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

何时使用IDataReader以及何时使用DataReader

SqlDataReader和所有其他数据提供程序实现IDataReader。如果您认为将来可能会将提供程序从sql更改为oracle或其他,请使用IDataReader。您将可以在不更改使用IDataReader的代码的情况下轻松更改它。否则,您可以使用SqlDataReader但如果您使用IDataReader,它将是一个解耦的设计,建议使用

只要您想将读取与(创建)实际读取器解耦,就可以使用接口。例如,为了测试或当您想为切换数据库做好准备时。

但通常情况下,使用DataReader的代码与读取器紧密耦合,您不会为接口而烦恼。

IDataReader指的是一个接口。基本上,如果您的方法接受IDataReader,这意味着它将接受任何使用该接口的东西。这意味着您基本上可以使用任何您想要的数据读取器。该方法将接受您的数据读取器,因为数据读取器实现了IDataReader接口。

这样做的优点是该方法不特定于特定类型的数据读取器。您还可以滚动实现此接口的自己的类。

引用此链接

如果您的代码不是绝对需要了解具体类型(例如,使用一些只在特定实现中可用的方法),那么我会说:参考接口。这使您的代码更加灵活——例如,在ADO.NET管道中添加一个分析装饰器(如"MiniProfiler")将是微不足道的。如果您已硬编码为SqlDataReader,则无法执行此操作。这也意味着您可以完全更改后端。但坦率地说,这通常是一个巨大的决定,并且将涉及重大的代码更改,因此这种情况不那么"明显"。

然而,我也认为大多数人写了太多涉及ADO.NET的管道代码。有一些工具,比如"dapper",或者更重(但功能更丰富)的ORM,可以为你做到这一点,避免了很多人为错误的风险。