下面的代码只是一个连接到 Oracle 数据库并将数据填充到 DataTable 的测试。执行语句da.Fill(dt);后,我总是得到异常
"Exception of type 'System.OutOfMemoryException' was thrown."
有人遇到过这种错误吗?我的项目运行在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
中只有一行,因为您的评论表明查询只返回一行。
需要调查的几件事:
Oracle ADO.NET 连接需要 Oracle 客户端软件,对吗?您的 Vista 机器上的 Oracle 软件版本与 XP 机器上的版本相同吗?也许那里有差异。
不要显示
e.Message
,而是尝试显示e.ToString()
以获得完整的堆栈跟踪 - 它可能会让您更深入地了解在哪里错误是从中抛出的。
关于c# - 尝试将数据填充到 DataTable 时总是出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/604996/