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

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

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA