Как прочитать значения Ordinate из Oracle Spatial, которые не подходят для десятичного типа .NET?

Я пытаюсь прочитать данные Oracle Spatial с помощью С#, используя ODP.NET.

В некоторых случаях мои данные Oracle Spatial имеют числовые значения в массиве OrdinateArray SDO_GEOMETRY, которые слишком велики для обработки .NET. Итак, когда я пытаюсь прочитать значения SDO_GEOMETRY, выдается «System.OverflowException: арифметическая операция привела к переполнению». В моем случае в значениях ординат просто слишком много цифр после запятой, и я не беспокоюсь о потере этой информации.

Мой код основан на образце приложения здесь: http://www.orafaq.com/forum/mv/msg/27794/296419/0/#msg_296419

Я вижу, что существуют подходы SafeMapping с наборами данных для чтения числовых типов, которые не вписываются в десятичные типы, но я не вижу, как применить это к внутренней части типа SDO_GEOMETRY.

Есть ли способ обойти эту проблему?


person Buster55    schedule 17.06.2011    source источник
comment
Вот определение Oracle: CREATE TYPE sdo_ordinate_array AS VARRAY (1048576) of NUMBER;   -  person user7116    schedule 23.06.2011


Ответы (2)


Что такое тип данных Oracle «OrdinateArray»? Если это определяемый пользователем тип (например, VARRAY), вы можете создать собственный класс .NET для приема данных. Для получения дополнительной информации об этом, прочитайте «Типы, определяемые пользователем».

person Christian Shay    schedule 22.06.2011

Возможно, для вас уже слишком поздно, но, возможно, кому-то может пригодиться мое решение проблемы.

Я столкнулся с этой проблемой при создании собственного шейп-файла для импортера Oracle Locator на С#.

Что я сделал, так это изменил тип переменной ordinatesArray с десятичного [] на двойной [] в классе SdoGeometry. Такое же изменение (десятичное в двойное) было необходимо для

открытый класс OrdinatesArrayFactory : OracleArrayTypeFactoryBase {}

и

OrdinatesArray = GetValue((int)OracleObjectColumns.SDO_ORDINATES) в методе MapToCustomObject.

На самом деле код работал нормально с десятичным типом, когда я импортировал данные с помощью инструмента oracle.spatial.util.SampleShapefileToJGeomFeature. Проблемы начались, когда я импортировал данные с помощью моего инструмента (геометрия шейп-файла в WKB, а затем вставил в Oracle, используя INSERT INTO some_table (GEOM) VALUES (SDO_UTIL.FROM_WKBGEOMETRY()). По какой-то причине ординаты были слишком большими для десятичной дроби, хотя я обрабатывал точность.

person Zeljko Vujaklija    schedule 28.08.2014