我們正在使用C#和.Net 4.5從Oracle數據庫下載數據。從ODBC讀取器讀取Oracle CLOB數據超級慢
values[]
是一個對象數組; 閱讀器是ODBC閱讀器,具有與CLOB數據的Oracle數據庫表的開放連接。
下面是相關代碼:
if (reader.Read())
{ //Download and save the values
for (int x = 0; x < reader.FieldCount; x++)
{ //Populate all the values
values[x] = reader[x]; //this line seems to cause execution to hang
}
//
//blah blah blah
//
}
的C#代碼似乎掛就行了values[x] = reader[x];
。
我們將行讀取中的每一列都分配給一個特殊的對象數組,因爲我們以後需要對這些數據做單獨的事情,而不必擔心此刻的數據類型。
問題在於,當一個表使用大(> 28,000)的Oracle CLOB數據列命中時,該行永遠不會完成。
如果我們從odbc閱讀器讀取的內容中刪除CLOB列,那麼所有內容都可以正常工作。
問題:
- 爲什麼會變成這樣?不應該陣列分配比較快?
- 什麼是一些可能的解決方法,所以我們可以保持CLOB列在下載的數據?我們 需要保持ODBC閱讀器作爲通用的ODBC閱讀器(而不是特定於Oracle)。
該應用程序已編譯並且必須保持32位。
謝謝!
Thanks @Hambone。我們使用ODBC的迫切理由是因爲這個應用程序可以針對衆多數據庫運行,而且我們不希望爲每個數據庫專門編寫代碼。例如,這個應用程序可以查詢SQL Server,Oracle,使用32位ODBC Tibco驅動程序的舊數據庫以及PostGre數據庫。代碼現在可用於除最近的Oracle CLOB數據之外的所有應用程序。鑑於有限的資源,很容易弄清楚爲什麼會發生這種情況。 –
我打算把它作爲現在的答案。不幸的是,我們目前沒有時間/資源來測試這個理論並且專門使用ODP編寫代碼,但是如果我們希望能夠回到並更新它。 :-) –