2013-07-20 72 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可以爲您做到這一點,避免了人爲錯誤的風險。

相關問題