メインコンテンツまでスキップ

Oracle ManagedDataAccess で値を取得時に「指定されたキャストは有効ではありません。」と出てしまった

Oracle ManagedDataAccessを使用してDBから値を取得したときに
System.InvalidCastException:指定されたキャストは有効ではありませんが出てしまったことがありました。
Select結果をOracleDataAdapterのFillで値を取得しているところでエラーが起きているようで、SQLクライアントで取得した場合は通常通り取得できるいたため、はじめは原因が分からなかったのですが、StackTraceを見て調べていくとGetDecimalの箇所で止まっているようでした。

結果としては、カラムのNumber型の精度を38にしていたところ、Decimal型で使用できる28桁以上の値が格納されてしまい、その値を取得時にキャスト失敗してエラーが起きていたようです。
Fillに全部任せていたので気が付かなかったです。それを回避するためのオプションとして、19.10バージョンからSuppressGetDecimalInvalidCastExceptionが追加されました。
設定を有効にすることで、四捨五入されてキャストされるようになります。