سؤال

لماذا أحصل على هذا الخطأ؟

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 يمكن تخزينها في الممتلكات الخاصة بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top