尝试将数据填充到DataTable时始终会出现异常

时间:2009-03-03 03:30:05

标签: c# oracle

以下代码只是连接Oracle数据库并将数据填充到DataTable的测试。执行语句 da.Fill(dt); 后,我总是得到异常

  

“抛出了'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,然后我的代码正常工作。

1 个答案:

答案 0 :(得分: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()以获得完整的堆栈跟踪 - 它可以让您更深入地了解错误发生的位置。

    < / LI>