sql >> Databáze >  >> RDS >> Oracle

Zadané přetypování není platné při naplňování DataTable z OracleDataAdapter.Fill()

Odpověď na mou vlastní otázku:

Zdá se tedy, že číselný typ Oracle může obsahovat mnohem více desetinných míst než desetinný typ C# a pokud se Oracle snaží vrátit více, než dokáže pojmout C#, vyvolá výjimku InvalidCastException.

Řešení?

Ve vašem SQL zaokrouhlete všechny výsledky, které mohou mít příliš mnoho desetinných míst, na něco rozumného. Tak jsem udělal toto:

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

A fungovalo to.

Odvod je:Nekompatibilita mezi typem čísel Oracle a C# dekadickým. Omezte svá desetinná místa Oracle, abyste se vyhnuli neplatným výjimkám přetypování.

Doufám, že to pomůže někomu dalšímu!



  1. Přístavní dělník. Obrázek MySQL. Soubor my.cnf nelze změnit

  2. MySQL:zkontrolujte, zda je hodnota obsažena v intervalu rozsahu

  3. Dynamické maskování dat v SQL Server pro začátečníky

  4. získat všechny položky kategorie a jejího potomka