2013-07-20 36 views
3

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

+0

http://stackoverflow.com/questions/6137245/c-sharp-idatareader-sqldatareader-difference –

回答

8

SqlDataReader和所有其他数据提供者实施IDataReader。如果您认为您可能会将供应商从sql更改为oracle或其他,然后再使用IDataReader。您将可以在不改变代码的情况下更改代码IDataReader。否则您可以使用SqlDataReader但是,如果您使用IDataReader它将是一个分离设计,并建议使用。

1

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

这样做的好处是该方法并不特定于特定类型的数据读取器。你也可以推出你自己的实现这个接口的类。

提到这个LINK

2

每当你想要去耦(创建)的实际读者阅读你会使用的接口。例如,用于测试或何时想要为切换数据库做好准备。

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

1

如果你的代码不绝对肯定需要了解具体类型(例如,使用一些方法,这只是具体实现可用),那么我会说:是指接口。这使得代码更加灵活 - 例如,添加到位于ADO.NET管道中的分析修饰器(如“MiniProfiler”)中将是微不足道的。如果您有硬编码为SqlDataReader,则不能这样做。这也意味着你可以完全改变后端。但坦率地说,这通常是一个巨大的决定,并且会涉及重大的代码更改,所以这种情况不那么“明显”。

但是,我也认为大多数人写了太多涉及ADO.NET的管道代码。有像“小巧玲珑”这样的工具,或者更重的(但功能更丰富的)ORM可以为您做到这一点,避免了人为错误的风险。

相关问题