2011-06-17 16 views
1

ODP.NETを使用してC#でOracle Spatialデータを読み取ろうとしています。Oracle Decimal Typeに収まらないOracle SpatialからOrdinate値を読み取る方法を教えてください。

場合によっては、Oracle SpatialデータのSDO_GEOMETRYのOrdinateArrayにNumber値があり、.NETで処理するには大きすぎます。したがって、SDO_GEOMETRY値を読み取ろうとすると、 "System.OverflowException:算術演算の結果、オーバーフローが発生しました"がスローされます。私の場合、縦座標値は小数点以下の桁数が多すぎるため、この情報を失うことには気にしません。

私のコードはここにサンプルアプリケーションに基づいています:http://www.orafaq.com/forum/mv/msg/27794/296419/0/#msg_296419

私はそこに十進型に収まらない数の種類を読み込むためのデータセットをてSafeMappingのアプローチがありますが、私はこれを適用する方法が表示されない参照SDO_GEOMETRY型の内部部分に渡します。

この問題を回避する方法はありますか?

+0

Oracleの定義は次のとおりです。CREATE TYPE sdo_ordinate_array AS VARRAY(1048576)of NUMBER; ' – user7116

答えて

0

"OrdinateArray"のOracleデータ型は?ユーザー定義型(VARRAYなど)の場合は、カスタム.NETクラスを作成してデータを受け入れることができます。これについての詳細は、「ユーザー定義型」を参照してください。

0

おそらくあなたには遅すぎるかもしれませんが、誰かが私の解決策を問題に使用する可能性があります。

カスタムシェイプファイルをC#のOracle Locatorインポータに作成する際に、この問題が発生します。

私が行ったのは、ordinatesArray変数の型をSdoGeometryクラスのdecimal []からdouble []に​​変更したことです。 MapToCustomObject方法でOracleArrayTypeFactoryBase {}

OrdinatesArray = GetValueメソッド((INT)OracleObjectColumns.SDO_ORDINATES):同じ変化(ダブルする小数)は

パブリッククラスOrdinatesArrayFactoryのために必要でした。

実際、oracle.spatial.util.SampleShapefileToJGeomFeatureツールを使用してデータをインポートしたとき、コードは10進数の型で正常に機能していました。 ツールを使用してデータをインポートしたときに問題が発生しました(シェイプファイルジオメトリをWKBにインポートしてから、 をINSERT INTO some_table(GEOM)VALUES()を使用してOracleに挿入したときに問題が発生しました。

関連する問題