我知道IDataReader
是接口,DataReader
是具体类型,但我仍然不知道何时使用每一个。我需要使用Datareader
和IDataReader
来迭代可能的数据。有没有更好的方法来决定何时使用界面或具体类型?
答案 0 :(得分:9)
SqlDataReader
和所有其他数据提供商实施IDataReader
。如果您认为将来可能会将提供程序从 sql 更改为 oracle或其他,请使用IDataReader
。您可以轻松地更改它,而无需更改使用IDataReader
的代码。否则,您可以使用SqlDataReader
。 但是如果您使用IDataReader
,它将是一个解耦设计,并且会被推荐。
答案 1 :(得分:2)
只要您想要将读数与(创建)实际读取器分离,就可以使用接口。例如,用于测试或者您希望为切换数据库做好准备。
但通常,DataReader消耗代码与读取器紧密耦合,您不必费心使用接口。
答案 2 :(得分:1)
IDataReader
指的是一个界面。基本上如果您的方法接受IDataReader
,这意味着它将接受使用该接口的任何内容。这意味着您可以使用您想要的任何数据阅读器。该方法将接受您的datareader,因为datareader实现了IDataReader
接口。
这样做的好处是该方法并非特定于特定类型的数据读取器。您也可以滚动自己的实现此接口的类。
推荐此LINK
答案 3 :(得分:1)
如果您的代码绝对需要了解具体类型(例如,使用某些仅在特定实现中可用的方法),那么我会说:参考界面。这使得代码更加灵活 - 例如,添加位于ADO.NET管道中的分析装饰器(如“MiniProfiler”)将是微不足道的。如果您已经硬编码为SqlDataReader
,则无法执行此操作。这也意味着你可以完全改变后端。但坦率地说,这通常是一个巨大的决定,并且将涉及重大的代码更改,因此这种情况不那么“明显”。
但是,我也认为大多数人都写了太多涉及ADO.NET的管道代码。有一些工具,如“精致”或更重(但功能更丰富)的ORM可以为您做到这一点,避免了很多人为错误的风险。