Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengelakkan 'Tidak dapat menghantar objek jenis 'System.DBNull' untuk menaip 'System.String'' Ralat dalam Pertanyaan Pangkalan Data C#?

Bagaimana untuk Mengelakkan 'Tidak dapat menghantar objek jenis 'System.DBNull' untuk menaip 'System.String'' Ralat dalam Pertanyaan Pangkalan Data C#?

Linda Hamilton
Linda Hamiltonasal
2025-01-25 10:16:14732semak imbas

How to Avoid

Mengatasi Ralat "Tidak dapat menghantar objek jenis 'System.DBNull' untuk menaip 'System.String'" dalam Pertanyaan Pangkalan Data

Interaksi pangkalan data kadangkala boleh membuang "Tidak dapat menghantar objek jenis 'System.DBNull' untuk menaip 'System.String'". Ini berlaku apabila cuba menukar terus nilai pangkalan data System.DBNull kepada rentetan. Mari terokai penyelesaian untuk mencegah perkara ini.

Berikut ialah coretan kod yang disemak yang menunjukkan pendekatan yang mantap:

<code class="language-csharp">public string GetCustomerNumber(Guid id)
{
   object accountNumber = DBSqlHelperFactory.ExecuteScalar(connectionStringSplendidCRM, 
                                                          CommandType.StoredProcedure, 
                                                          "spx_GetCustomerNumber", 
                                                          new SqlParameter("@id", id));

   return accountNumber is DBNull ? string.Empty : accountNumber.ToString();
}</code>

Versi yang dipertingkatkan ini mengelakkan penghantaran terus. Ia menggunakan operator bersyarat (?:) untuk menyemak sama ada accountNumber ialah DBNull. Jika ya, rentetan kosong dikembalikan; jika tidak, ToString() menukar objek kepada rentetan dengan selamat.

Untuk penyelesaian yang lebih serba boleh, pertimbangkan fungsi generik ini:

<code class="language-csharp">public static T ConvertFromDBVal<T>(object obj)
{
    if (obj == null || obj == DBNull.Value)
    {
        return default(T); // Returns the default value for the specified type
    }
    return (T)obj;
}</code>

Fungsi generik ini mengendalikan pelbagai jenis data. Anda menentukan jenis sasaran menggunakan parameter jenis, membenarkan penukaran yang selamat dan betul jenis:

<code class="language-csharp">return ConvertFromDBVal<string>(accountNumber);</code>

Pendekatan ini lebih bersih, lebih boleh digunakan semula dan kurang terdedah kepada ralat penghantaran. Dengan melaksanakan kaedah ini, anda boleh mengendalikan nilai DBNull dengan berkesan dan menghalang ralat "Tidak dapat menghantar objek jenis 'System.DBNull' untuk menaip 'System.String'" daripada mengganggu operasi pangkalan data anda.

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan 'Tidak dapat menghantar objek jenis 'System.DBNull' untuk menaip 'System.String'' Ralat dalam Pertanyaan Pangkalan Data C#?. 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