English 中文(简体)
尝试向DataTable填充数据时总是出现异常。
原标题:
  • 时间:2009-03-03 03:30:05
  •  标签:

以下代码仅是连接到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,然后我的代码正常工作。

问题回答

你的 dual 表有多大? 这个查询:

select 1 from dual

将返回一个单列表,行数与dual表相同,每行都有1。如果表有数百万行,则如果出现内存异常,我也不会感到惊讶。

当然,这并不能解释为什么它在XP上可以工作,但在Vista上却不能,除非它是某些特定实现(例如在两个不同的工作站上查询不同的数据库实例)。

编辑2:

好的,那么假设在dual中只有一行,因为你的评论表明查询只返回一行。

有几件事情需要调查:

  1. Oracle ADO.NET连接需要Oracle客户端软件,对吧?您的Vista桌面上的Oracle软件与XP桌面上的版本相同吗?也许存在差异。

  2. 不要显示e.Message,尝试显示e.ToString()以获取完整的调用堆栈,这可能会为您提供更多关于错误抛出位置的见解。





相关问题
热门标签