2009-03-03 64 views
2

下面的代碼僅僅是連接到Oracle數據庫並將數據填充到DataTable的測試。執行語句da.Fill(dt);,我總是得到異常嘗試將數據填充到DataTable時始終發生異常

「拋出類型'System.OutOfMemoryException'的異常。

有沒有人遇到過這種錯誤?我的項目在VS 2005上運行,我的Oracle數據庫版本是11g。我的電腦使用的是Windows Vista。如果我將這些代碼複製到Windows XP上運行,它可以正常工作。

謝謝。

using System.Data; 
using Oracle.DataAccess.Client; 

... 

string cnString = "data source=net_service_name; user id=username; password=xxx;"; 
OracleDataAdapter da = new OracleDataAdapter("select 1 from dual", cnString); 

try 
{ 
    DataTable dt = new DataTable(); 
    da.Fill(dt); // Got error here 
    Console.Write(dt.Rows.Count.ToString()); 

} 
catch (Exception e) 
{ 
    Console.Write(e.Message); // Exception of type 'System.OutOfMemoryException' was thrown. 
} 

更新

我不知道發生了什麼我的電腦。我只是重新安裝Oracle 11g,然後我的代碼正常工作。

+0

這兩臺計算機是否具有相同版本的Oracle驅動程序和.NET數據提供程序? 有沒有任何可用於Vista的驅動程序,你還沒有安裝? – 2009-03-11 11:10:52

回答

0

你的dual表有多大?這個查詢:

select 1 from dual 

將每一行中有許多行返回單個列的表作爲dual表,1。如果表格有數百萬行,那麼如果它拋出內存不足異常,我不會感到驚訝。

編輯當然,這並不能解釋爲什麼它會在XP中工作,但不能在Vista上,除非它的東西,實現特定的(查詢在兩個不同的工作站數據庫的不同實例,例如)。

編輯2:

好了,想必是dual只有一排,因爲您的評論表示該查詢只返回單行。

幾件事情進行調查:

  1. Oracle的ADO.NET連接需要Oracle客戶端軟件,對不對?您的Vista機箱上的Oracle軟件是否與XP機箱上的版本相同?也許那裏有差異。

  2. 而不是顯示e.Message,嘗試顯示e.ToString()以獲取完整的堆棧跟蹤 - 它可能會讓您更深入地瞭解錯誤發生的位置。

+0

該查詢只返回1行,並且該值爲1. – 2009-03-03 04:45:23

相關問題