невозможно вставить значение 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 to 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, допускающий значение NULL, а затем сохранить значение NULL в значении или сделать что-то со значением, чтобы представить значение NULL, например 0, которое может быть сохранено в вашем свойстве.