لا يمكن إدراج قيمة dbnull في خادم SQL
-
22-09-2019 - |
سؤال
لماذا أحصل على هذا الخطأ؟
Object cannot be cast from DBNull to other types.
عندما أدخلت قيمة فارغة لنمذجة رقمية في SQL Server 2005
ها هو رمز بلدي ،
if (MeasurementTr.Visible == true)
{
materialIn.measurementId = Convert.ToInt64(DlMeasurement.SelectedValue.ToString());
}
else
{
materialIn.measurementId = Convert.ToInt64(DBNull.Value);
}
تعديل :
هل هذا صحيح؟؟
materialIn.measurementId = (Convert.ToInt64(DlMeasurement.SelectedValue.ToString()) != 0) ? Convert.ToInt64(DlMeasurement.SelectedValue.ToString()) : 0;
المحلول
لا يمكنك التحويل DBNull.Value
ل Int64
كما يحاول الكود الخاص بك القيام به Convert.ToInt64
. DBNull.Value
يعني "غير معروف" أو "غير موجود" ، وبالتالي لا يوجد تحويل منطقي إلى أي نوع بيانات آخر.
إذا materialIn
مثال هو شكل من أشكال القوي DataRow
, ، سيكون لها ملف SetMeasurementIdNull
الطريقة ، وهو ما تحتاج إلى استخدامه. إذا كنت تستخدم LINQ إلى SQL أو EF ، فلن تحتاج إلى التعامل معها DBNull
على الإطلاق ، يمكنك بدلاً من ذلك أن تكتب فقط materialIn.measurementId = null
.
نصائح أخرى
لأن ذلك Object cannot be cast from DBNull to other types.
إذن ما عليك فعله هو التحقق من القيمة DBNull
.
materialIn.MeasurementId = dlmeasurement.SelectedValue == dbnull.value؟ 0: convert.toint64 (dlmeasurement.SelectedValue.ToString ()) ؛
Dbnull لا يتحول إلى int64. ستحتاج إلى استخدام int nullable ثم تخزين فارغة في القيمة أو القيام بشيء مع القيمة لتمثيل فارغة مثل 0 يمكن تخزينها في الممتلكات الخاصة بك.