2010-07-08 66 views
1

我需要通過DataReader迭代兩次。有沒有辦法做到這一點,而不使用數據集,並沒有運行兩次查詢?順便說一句,我正在使用C#。
謝謝通過DataReader迭代兩次

+0

你爲什麼試圖避免數據集?如果這是性能問題,您可以查看DataRow對象上的ItemArray。使用它而不是使用列索引器可以更快。 – 2010-07-08 20:42:19

+0

這是幾十萬行。我會研究,謝謝! – Pascal 2010-07-09 15:10:48

回答

2

簡短的答案是否定的,你運行結果集的枚舉,然後你就完成了。應該做的是將結果轉儲爲某種簡化的原始結果,您可以儘可能多地進行迭代(避免DataSet的開銷)。

如果你看一下MSDN,它會注意到SqlDataReader是「僅向前」,這將再次表明這是不可能的。

+0

我知道它只是向前...我只是認爲可能有一些方法來解決它,但謝謝! – Pascal 2010-07-08 20:37:34

0

IDataReader規範不允許列表重置,但檢查具體實現還實現IEnumerator或具有GetEnumerator()函數有一個復位命令作爲該接口的一部分。

+0

如果Reset方法在該類上工作,並且不會拋出'NotImplementedException',它很可能會重新查詢數據庫。 – 2010-07-08 20:36:49

2

這是可能的,但並不那麼簡單,因爲數據讀取器在每次Read()調用時都會發生變化。所以你需要將以前的值存儲在某個地方以便下次訪問它。在這裏使用數據集並不是什麼壞主意。

3

它是一個只讀的閱讀器,你不能回頭。你最好的選擇是,不要迭代兩次數據讀取器,而是在一次迭代中執行你想要做的兩個操作。

你可以自己緩存結果,但這就像摧毀DataReader的目的,所以如果你需要多次使用數據,你必須選擇另一種方式來訪問它。