Oracle
 sql >> база данни >  >> RDS >> Oracle

Посоченото предаване не е валидно при попълване на DataTable от OracleDataAdapter.Fill()

Отговарям на собствения си въпрос:

Така че изглежда, че числовият тип на 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#. Ограничете своите десетични знаци на Oracle, за да избегнете невалидните изключения за прехвърляне.

Надявам се това да помогне на някой друг!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да създадете процедура в Oracle SQL Developer?

  2. Съхранена функция на Oracle - подайте името на таблицата като параметър

  3. ORA-22054 Грешка при препълване

  4. ORACLE 10g :To_date() Невалиден месец

  5. Мистериозен SQL блокира изпълнението на съхранената ми процедура в ORACLE