Rumah >pangkalan data >tutorial mysql >Mengapa Menghantar SQL Terapung ke C# Float Membuang InvalidCastException?

Mengapa Menghantar SQL Terapung ke C# Float Membuang InvalidCastException?

DDD
DDDasal
2024-12-23 18:15:17981semak imbas

Why Does Casting a SQL Float to a C# Float Throw an InvalidCastException?

Percanggahan antara SQL Float dan C# Float

Apabila mendapatkan semula nilai daripada pangkalan data SQL dengan jenis data float dan cuba menetapkannya kepada Pembolehubah C# jenis apungan, anda mungkin menghadapi InvalidCastException. Ini kerana jenis data apungan SQL sepadan dengan dua kali ganda dalam C#.

Contoh:

Pertimbangkan kod berikut:

DataRow exercise = _exerciseDataSet.Exercise.FindByExerciseID(65);
_AccelLimit = (float)exercise["DefaultAccelLimit"]; // Throws InvalidCastException

Sebab Pengecualian:

Balingan eksplisit daripada objek terapung dalam kod di atas tidak boleh dilakukan kerana jenis data asas adalah dua kali ganda. Apungan SQL disimpan sebagai nilai titik terapung 64-bit, yang berbeza daripada nilai titik terapung 32-bit yang diwakili oleh jenis data apungan C#.

Penyelesaian:

Untuk menyelesaikan isu ini, anda boleh menukar secara eksplisit nilai yang diperoleh kepada dua kali ganda sebelum menghantarnya ke apungan:

_AccelLimit = (float)(double)exercise["DefaultAccelLimit"];

Penukaran ini memastikan bahawa nilai yang diperoleh dibuang dengan betul kepada dua kali ganda, dan kemudian ditukar kepada apungan untuk memadankan jenis data yang diisytiharkan pembolehubah.

Atas ialah kandungan terperinci Mengapa Menghantar SQL Terapung ke C# Float Membuang InvalidCastException?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn