Всегда получайте исключение при попытке заполнить данные в DataTable - PullRequest
2 голосов
/ 03 марта 2009

Приведенный ниже код является всего лишь тестом для подключения к базе данных 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 голосов
/ 03 марта 2009

Насколько велик ваш dual стол? Этот запрос:

select 1 from dual

Возвращает таблицу с одним столбцом, содержащую столько строк, сколько таблица dual, по 1 в каждой строке. Если в таблице миллионы строк, меня не удивит, если она выдаст исключение нехватки памяти.

Редактировать Конечно, это не объясняет, почему это будет работать на XP, но не на Vista, если это не связано с реализацией (запрос другого экземпляра базы данных на двух разных рабочих станциях пример). * * +1010

Редактировать 2:

Хорошо, предположительно, в dual есть только одна строка, так как ваш комментарий указывает, что запрос возвращает только одну строку.

Пара вещей для расследования:

  1. Для соединения Oracle ADO.NET требуется клиентское программное обеспечение Oracle, верно? Является ли ПО Oracle на вашем компьютере с Vista той же версией, что и на компьютере с XP? Возможно, здесь есть расхождение.

  2. Вместо отображения e.Message попробуйте показать e.ToString(), чтобы получить полную трассировку стека - это может дать вам более полное представление о том, откуда выдается ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...