This is the designed behaviour. You should use a parameter with the OracleDbType.Number type for a column with the NUMBER data type. OracleDbType.Double should be used for columns with the BINARY_DOUBLE data type.

You need to change OracleDbType of your parameter from Double to Number or change the data type in the Oracle table to BINARY_DOUBLE in order to solve the issue.

If we use oracleDbType.Number, we solved the precision issue.
But if we want to insert a very big data like 134340000000000000000000000000000
there will be exception:
Value was either too large or too small for a Decimal.
could you share some ideas how to solve?

Oracle Number data type can store up to 38 decimal digits. At the same time, System.Decimal can store only values up to 79,228,162,514,264,337,593,543,950,335 which is 29 decimal digits. For more information, please refer to https://msdn.microsoft.com/en-us/librar ... .110).aspx.
When you create System.Decimal with a value 134340000000000000000000000000000 (33 digits), the System.Decimal generates the exception "Value was either too large or too small for a Decimal". The only way to pass a value of more than 29 digits to a parameter is passing the value as a string.