Я создал модель из базы данных, используя dotConnect для PostgreSQL, профессиональное издание. Все работает отлично, исключая одно из объектов. Некоторые свойства были сгенерированы как десятичные. Образец недвижимости в моей Entity
:OverflowException with dotConnection PostgreSQL
public global::System.Nullable<decimal> CollectionToPay
{
get
{
global::System.Nullable<decimal> value = _CollectionToPay;
OnGetCollectionToPay(ref value);
return value;
}
set
{
if (_CollectionToPay != value)
{
OnCollectionToPayChanging(ref value);
ReportPropertyChanging("CollectionToPay");
_CollectionToPay = StructuralObject.SetValidValue(value);
ReportPropertyChanged("CollectionToPay");
OnCollectionToPayChanged();
}
}
}
private global::System.Nullable<decimal> _CollectionToPay;
Когда я пытаюсь получить коллекцию сущностей я получаю сообщение об ошибке:
A first chance exception of type 'System.OverflowException' occurred in Devart.Data.PostgreSql.dll
Additional information: Value was either too large or too small for a Decimal.
Я даже не знаю, какой ряд casues проблемы. Я собираю около 400 строк. Есть ли быстрый способ определить проблемную строку? Таблица имеет около 170 столбцов, около 20 имеют десятичный тип. Я набирал строки в pgAdmin, но не значения выглядят слишком большими/маленькими. Что я могу сделать? Я предлагаю изменить decimal
на double
, но сначала мне нужно найти проблемные строки.
К сожалению, я не могу изменить схему или даже манипулировать данными. Это внешняя система, и мне предоставляется только выполнение выборок. Более того, максимальное значение, хранящееся, представляет собой проблемный столбец: «88919.999999883' и min' 0' .. Поэтому проблема должна быть с точностью. Число с наибольшей точностью - '6479.696856287425149700598802645'. Присвоение непосредственно десятичному значению не вызывает ошибок: 'decimal a = 6479.696856287425149700598802645m'. Возможно, pgAdmin усекает отображаемое значение. –
Ну, в этом случае вам нужно будет определить, какое значение вызывает исключение в вашем коде. Отладчик может быть полезен для этого. Или может быть больше деталей в цепочке причин исключений (если C# делает то же, что и Java, я не очень много C#). –
Проблемное значение ... '5670.074606244819010776457585128'. К сожалению, 'decimal a = 5670.074606244819010776457585128m' также работает. Хорошо, я вижу. Значение округляется до '5670.0746062448190107764575851'. –