ODP.net Ошибка точности десятичного числа Oracle при заполнении набора данных. Исключение: арифметическая операция вызвала переполнение - PullRequest
13 голосов
/ 25 июня 2009

Я работаю в c # .net 2 (Visual Studio 2005 SP1), пытаясь заполнить набор данных результатами из таблицы select * from таблицы из базы данных Oracle10g. Платформа .net, IDE и база данных не могут быть изменены на этом клиентском сайте.

Я подключаюсь, используя провайдера ODP.net версия dll 2.102.2.20

Когда я запускаю команду заполнения, я получаю исключение:

Арифметическая операция привела к переполнению

Кроме того, если я попытаюсь просмотреть столбец с ошибками в конструкторе Visual Studio (Показать данные таблицы), я получу для каждой строки для этого столбца в таблице. Код работает отлично, если мой запрос выбирает другие столбцы с целыми числами, например, пропуская этот столбец.

Столбец, о котором идет речь, выглядит нормально, когда я просматриваю его в базе данных из Toad, данные выглядят так:

919,742866695572

Мне нужна точность , как это требуется для симуляции Монте-Карло.

Если вместо использования адаптера данных для заполнения таблицы данных я использую datareader и вызываю dataReader.getValue (columnIndex), я получаю ту же ошибку, но если я вызываю dataReader.GetOracleDecimal (columnIndex), то я получаю искомый результат , без ошибок.

Я бы лучше использовал адаптер данных и заполнил набор данных (обратите внимание, что это нетипизированные наборы данных, поскольку я не мог заставить автоматически сгенерированные наборы данных со строгой типизацией работать из базы данных оракула). Я не хочу использовать datareader и просматривать результаты (выбрать значения столбцов), так как я пытаюсь написать это как универсальный метод для работы во многих сценариях, независимо от количества столбцов, индекса десятичных столбцов, для которых требуются определенные принимать звонки по типу данных.

Кто-нибудь может помочь? Могу ли я использовать новые версии библиотек ODP.net для подключения к более старой базе данных Oracle10g ? Интересно, поможет ли это.

Спасибо

Ответы [ 2 ]

1 голос
/ 26 ноября 2010

Проблема в том, что точность результирующего значения слишком высока для преобразования в System.Decimal без потери данных. Я забыл точное количество разрешенных цифр, но это около 18 или около того. Допустимо ли округлять () значение результата до такого количества цифр? В приведенном вами примере, round(MyColumn, 15) или около того должно быть достаточно ...

0 голосов
/ 25 июня 2009

Вы можете попробовать последнюю версию ODP.Net (11g) . Это обратно совместимо. Я использую его для подключения к базе данных 10g просто отлично. Я думаю, что это должно работать с VS 2005 тоже. Для развертывания clickonce просто добавьте dll, на который ссылается этот вопрос: Какой минимальный размер клиента требуется для подключения C # к базе данных Oracle? Важное замечание: если у вас установлена ​​последняя версия odp.net все библиотеки включены в каталог установки. Вам не нужно скачивать мгновенный клиент отдельно. Просто найдите их.

...