sql >> Database teknologi >  >> RDS >> Oracle

Den angivne cast er ikke gyldig, når DataTable udfyldes fra OracleDataAdapter.Fill()

Besvarer mit eget spørgsmål:

Så det ser ud til, at Oracle-taltypen kan indeholde mange flere decimaler end C#-decimaltypen, og hvis Oracle forsøger at returnere mere, end C# kan indeholde, kaster den InvalidCastException.

Løsning?

I din sql skal du runde alle resultater, der kan have for mange decimaler, til noget fornuftigt. Så jeg gjorde dette:

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

Og det virkede.

Take away er:Inkompatibilitet mellem Oracle nummertype og C# decimal. Begræns dine Oracle-decimaler for at undgå de ugyldige cast-undtagelser.

Håber dette hjælper en anden!



  1. Kan vi importere SQL fra S3 bucket til AWS ec2 (instans)?

  2. Sådan opdateres tabellen automatisk i MYSQL ved hjælp af TRIGGER

  3. Sådan oprettes og udføres procedurer i MySQL workbench

  4. Fejl ved forsøg på at bruge SET @rownum =0; i PHP