2009-03-03 161 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

相关问题