невозможно вставить значение DBNULL на сервер sql

StackOverflow https://stackoverflow.com/questions/2137591

  •  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, которое может быть сохранено в вашем свойстве.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top