sql >> データベース >  >> RDS >> Oracle

OracleDataAdapter.Fill()からDataTableにデータを入力する場合、指定されたキャストは無効です。

    私自身の質問に答える:

    したがって、Oracleの数値型はC#の小数点以下の桁数よりもはるかに多くの小数点以下の桁数を保持できるようです。OracleがC#の小数点以下の桁数を超えて返そうとすると、InvalidCastExceptionがスローされます。

    解決策?

    SQLで、小数点以下の桁数が多すぎる可能性のある結果を適切なものに丸めます。だから私はこれをしました:

    SELECT acct_no, ROUND(market_value/mv_total, 8)  -- rounding this division solves the problem
    FROM myTable
    WHERE NVL(market_value, 0) != 0
    AND NVL(mv_total, 0) != 0
    

    そしてそれはうまくいきました。

    要点は次のとおりです。Oracleの数値型とC#の10進数の間の非互換性。無効なキャスト例外を回避するために、Oracleの小数点以下の桁数を制限してください。

    これが他の誰かに役立つことを願っています!



    1. cpanelでウェブサイトフォルダにログインする際のphp警告

    2. テーブル変数にインデックスを作成する

    3. Codeigniterのフォーマット済みクエリを元のMysqlクエリに変換する方法(例:$ this-> db-> select('table1。*、table2。*、table3。*'))

    4. SQLビュー:SQLでビューを操作する方法は?