Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Pemeran yang ditentukan tidak valid saat mengisi DataTable dari OracleDataAdapter.Fill()

Menjawab pertanyaan saya sendiri:

Jadi sepertinya tipe angka Oracle dapat menampung lebih banyak tempat desimal daripada tipe desimal C# dan jika Oracle mencoba mengembalikan lebih dari yang dapat disimpan oleh C#, ia melempar InvalidCastException.

Solusi?

Di sql Anda, bulatkan hasil apa pun yang mungkin memiliki terlalu banyak tempat desimal menjadi sesuatu yang masuk akal. Jadi saya melakukan ini:

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

Dan itu berhasil.

Kesimpulannya adalah:Ketidakcocokan antara tipe angka Oracle dan desimal C#. Batasi tempat desimal Oracle Anda untuk menghindari pengecualian cast yang tidak valid.

Semoga ini bisa membantu orang lain!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah menggunakan SELECT di dalam fungsi tabel PL/SQL pipelined diperbolehkan?

  2. Oracle (ORA-02270):tidak ada kunci unik atau kunci utama yang cocok untuk kesalahan daftar kolom ini

  3. PLS-00201 pengenal 'PACKAGENAME.PROCEDURENAME' harus dideklarasikan

  4. prosedur tersimpan untuk memilih semua baris dari tabel di Oracle

  5. Masukkan XML dengan lebih dari 4000 karakter ke dalam kolom Oracle XMLTYPE