2014-02-24 99 views
2

我目前的情況是,我有一個非常大的記錄集(200萬條左右的記錄)我試圖使用.Net和Oracle.DataAccess.dll庫(版本2.112。 2.0)。DataReader掛起時檢索大記錄集

Imports Oracle.DataAccess.Client 
Imports Oracle.DataAccess 

...在我的程序:現在

Dim conn As New OracleConnection() 

    ... connect to DB, etc (this all works fine) ... 

Dim strSQLQuery = (Query for large recordset) 
Dim cmd = New OracleCommand(strSQLQuery, conn) 

    Using Reader As OracleDataReader = cmd.ExecuteReader() 
    ... 
    End Using 

,這個程序工作正常較小的查詢,但對於這個大型查詢,它似乎無限期掛起(我已經等了一夜然後最後退出程序)在Using..行,甚至沒有進入使用語句中的代碼行......它似乎沒有做任何事情。

起初,我想,也許這是我的查詢本身的問題,但是當我嘗試使用SQL Navigator中運行它,它會返回少於10分鐘內記錄...

我做什麼錯誤?這是正常的嗎?有沒有可以設置的設置使OracleDataReader不掛?

此外,即使此代碼在VB中,我也同樣適用於C#。

+0

SQL Navigator是否實際返回所有值?他們可能正在包裝你的sql語句,只得到前100名的結果或其他東西。 –

+0

它返回頂部250,然後你可以點擊繼續獲取越來越多...如果我選擇將其下載到分隔文本文件,它需要一段時間,但它在不到30分鐘左右.. 。 –

+0

也許您的機器上的網絡緩衝區已滿?如果是這樣,也許你可以簡單地把你的查詢分成多個小的查詢? –

回答

0

這可能聽起來很愚蠢您是否嘗試過創建閱讀器而不使用using語句。在工作中,他們建議不要做「使用」,因爲當我們使用Using時,我們發現大量數據會發生不好的事情。所以作爲一個最佳實踐,我們只是在一個新的程序中創建讀者,所以它的範圍在程序結束時結束。

+0

非常有趣! - 我從來沒有嘗試過......我目前沒有遇到這個問題,但下次我會這樣做,如果有效,我會** HAPPILY **標記爲解決方案..謝謝你的想法。從來沒有想過即使這樣做。 –