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:
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(); }
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:
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; }
Fungsi generik ini mengendalikan pelbagai jenis data. Anda menentukan jenis sasaran menggunakan parameter jenis, membenarkan penukaran yang selamat dan betul jenis:
return ConvertFromDBVal<string>(accountNumber);
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!