何时使用IDataReader以及何时使用DataReader
本文关键字:何时使 DataReader IDataReader | 更新日期: 2023-09-27 18:23:57
我知道IDataReader
是接口,DataReader
是具体类型,但我仍然不知道何时使用每种类型。我需要遍历使用Datareader
和IDataReader
的数据。有没有更好的方法来决定何时使用接口或具体类型?
SqlDataReader
和所有其他数据提供程序实现IDataReader
。如果您认为将来可能会将提供程序从sql更改为oracle或其他,请使用IDataReader
。您将可以在不更改使用IDataReader
的代码的情况下轻松更改它。否则,您可以使用SqlDataReader
但如果您使用IDataReader
,它将是一个解耦的设计,建议使用
只要您想将读取与(创建)实际读取器解耦,就可以使用接口。例如,为了测试或当您想为切换数据库做好准备时。
但通常情况下,使用DataReader的代码与读取器紧密耦合,您不会为接口而烦恼。
IDataReader
指的是一个接口。基本上,如果您的方法接受IDataReader
,这意味着它将接受任何使用该接口的东西。这意味着您基本上可以使用任何您想要的数据读取器。该方法将接受您的数据读取器,因为数据读取器实现了IDataReader
接口。
这样做的优点是该方法不特定于特定类型的数据读取器。您还可以滚动实现此接口的自己的类。
引用此链接
如果您的代码不是绝对需要了解具体类型(例如,使用一些只在特定实现中可用的方法),那么我会说:参考接口。这使您的代码更加灵活——例如,在ADO.NET管道中添加一个分析装饰器(如"MiniProfiler")将是微不足道的。如果您已硬编码为SqlDataReader
,则无法执行此操作。这也意味着您可以完全更改后端。但坦率地说,这通常是一个巨大的决定,并且将涉及重大的代码更改,因此这种情况不那么"明显"。
然而,我也认为大多数人写了太多涉及ADO.NET的管道代码。有一些工具,比如"dapper",或者更重(但功能更丰富)的ORM,可以为你做到这一点,避免了很多人为错误的风险。