c# - 尝试将数据填充到 DataTable 时总是出现异常

标签 c# oracle

下面的代码只是一个连接到 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 中只有一行,因为您的评论表明查询只返回一行。

需要调查的几件事:

  1. Oracle ADO.NET 连接需要 Oracle 客户端软件,对吗?您的 Vista 机器上的 Oracle 软件版本与 XP 机器上的版本相同吗?也许那里有差异。

  2. 不要显示 e.Message,而是尝试显示 e.ToString() 以获得完整的堆栈跟踪 - 它可能会让您更深入地了解在哪里错误是从中抛出的。

关于c# - 尝试将数据填充到 DataTable 时总是出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/604996/

相关文章:

c# - 检查窗体上的按钮单击事件 - C#

c# - 在 C# 应用程序中隐藏 MySQL 凭据

oracle - 禁用与丢弃约束

c# - 如何将 Controller 用于局部 View ?

c# - 以编程方式刷新网页

sql - 在表格的每一行中插入一个随机数

java - CachedRowSet 比 ResultSet 慢?

sql - 如何在 SQL Developer Oracle 中不使用 MAX、LIMIT 或 ORDER BY 的情况下找到 Product 表中最昂贵的产品?

c# - 代码优先更改桥实体表的名称

sql - 递归查询设计 - Oracle SQL