以下代码只是连接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,然后我的代码正常工作。
答案 0 :(得分:0)
你的dual
牌桌有多大?这个查询:
select 1 from dual
将返回一个包含dual
表的行数的单列表,每行包含1个。如果表有数百万行,那么如果它引发内存不足异常就不会让我感到惊讶。
编辑当然,这并不能解释为什么它可以在XP上运行而不能在Vista上运行,除非它是特定于实现的(在两个不同的工作站上查询数据库的不同实例,例如)。
编辑2:
好的,假设dual
中只有一行,因为您的评论表明查询只返回一行。
要研究的几件事情:
Oracle ADO.NET连接需要Oracle客户端软件,对吗? Vista盒子上的Oracle软件是否与XP盒子上的版本相同?也许那里存在差异。
不要显示e.Message
,而是尝试显示e.ToString()
以获得完整的堆栈跟踪 - 它可以让您更深入地了解错误发生的位置。