Всегда получайте исключение при попытке заполнить данные в DataTable

2

Код ниже - это просто тест для подключения к базе данных 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
    На обоих компьютерах установлены одинаковые версии драйверов Oracle и поставщика данных .NET? Есть ли какие-либо пути для драйверов оракула для Vista, которые вы не установили?
Теги:

1 ответ

0

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

select 1 from dual

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

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

Изменить 2:

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

Несколько вещей, чтобы исследовать:

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

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

  • 0
    Запрос возвращает только 1 строку, а значение равно 1.
  • 0
    В Oracle вы не можете написать «выбрать 1», как в MS SQL Sever. Но существует двойная «псевдотаблица», поэтому вы можете написать «выбрать 1 из двойных» и получить тот же результат. Смотрите: " en.wikipedia.org/wiki/DUAL_table ".
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню