Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Membetulkan Ralat 'Objek tidak boleh dihantar dari DBNull' dalam Operasi Pangkalan Data C#?

Bagaimana untuk Membetulkan Ralat 'Objek tidak boleh dihantar dari DBNull' dalam Operasi Pangkalan Data C#?

Susan Sarandon
Lepaskan: 2025-01-11 15:12:42
asal
586 orang telah melayarinya

How to Fix

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan