Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Membetulkan Ralat 'Objek tidak boleh dihantar dari DBNull' dalam Operasi Pangkalan Data C#?
Menyahpepijat "Objek tidak boleh dihantar dari DBNull" dalam Operasi Pangkalan Data C#
Aplikasi C# anda membuang pengecualian "Objek tidak boleh dihantar dari DBNull ke jenis lain" semasa interaksi pangkalan data, khususnya dalam kaedah Create
. Ralat ini berpunca daripada percubaan untuk menukar nilai NULL
pangkalan data (diwakili sebagai DBNull
dalam ADO.NET) kepada jenis yang tidak boleh dibatalkan, seperti integer. Masalahnya mungkin terletak pada cara parameter output op_Id
daripada prosedur tersimpan sp_Register
dikendalikan.
Untuk membetulkan ini, laksanakan semakan DBNull
sebelum menghantar parameter output:
<code class="language-csharp">var outputParam = dataAccCom.GetParameterValue(IDbCmd, "op_Id"); if (outputParam != DBNull.Value) { DataTO.Id = Convert.ToInt64(outputParam); } else { // Handle the case where op_Id is NULL. Options include: // 1. Assign a default value: DataTO.Id = -1; (or another appropriate default) // 2. Throw a more informative exception: throw new Exception("op_Id returned NULL from sp_Register"); // 3. Set a flag indicating a failure: DataTO.IdIsAssigned = false; }</code>
Coretan kod ini dengan jelas mengesahkan bahawa outputParam
bukan DBNull.Value
sebelum mencuba penukaran. Memilih tindakan yang sesuai dalam blok else
bergantung pada logik aplikasi anda; memberikan nilai lalai, membuang pengecualian tersuai atau menetapkan bendera status adalah semua pilihan yang berdaya maju.
Selain itu, semak ReplaceNull
kaedah pembantu anda. Pastikan mereka mengendalikan semua jenis data yang dihantar kepada mereka dengan betul, terutamanya DateTime
. Daripada hanya menggantikan dengan masa semasa, pertimbangkan untuk menggunakan lalai yang lebih sesuai seperti DateTime.MinValue
atau default(DateTime)
bergantung pada konteks anda. Kaedah ReplaceNull
yang teguh mungkin kelihatan seperti ini:
<code class="language-csharp">public static object ReplaceNull(object value, Type type) { if (value == DBNull.Value) { if (type == typeof(string)) return ""; if (type == typeof(int)) return 0; if (type == typeof(DateTime)) return DateTime.MinValue; // Add more types as needed... return default(object); // Or throw an exception if an unexpected type is encountered } return value; }</code>
Dengan memasukkan perubahan ini, anda akan menghalang pengecualian penghantaran dan mengendalikan nilai NULL
dengan anggun, meningkatkan keteguhan kod interaksi pangkalan data anda. Ingat untuk memilih else
gelagat sekat yang paling sesuai dengan strategi pengendalian ralat aplikasi anda.
Atas ialah kandungan terperinci Bagaimana untuk Membetulkan Ralat 'Objek tidak boleh dihantar dari DBNull' dalam Operasi Pangkalan Data C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!