не может вставить значение DBNULL в сервер SQL - PullRequest
3 голосов
/ 26 января 2010

Почему я получаю эту ошибку?

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;

Ответы [ 3 ]

5 голосов
/ 26 января 2010

Вы не можете преобразовать DBNull.Value в Int64, поскольку ваш код пытается сделать это в Convert.ToInt64. DBNull.Value означает «неизвестный» или «несуществующий», и поэтому нет логического преобразования в любой другой тип данных.

Если экземпляр materialIn является некой формой строго типизированного DataRow, он будет иметь метод SetMeasurementIdNull, который вам и нужно использовать. Если вы используете Linq для SQL или EF, вам вообще не нужно иметь дело с DBNull, вместо этого вы должны просто написать materialIn.measurementId = null.

1 голос
/ 26 января 2010

Потому что Object cannot be cast from DBNull to other types.

Итак, вам нужно проверить значение для DBNull.

materialIn.measurementId = DlMeasurement.SelectedValue == DBNull.Value? 0: Convert.ToInt64 (DlMeasurement.SelectedValue.ToString ());

0 голосов
/ 26 января 2010

DBNull не конвертируется в Int64. Вам нужно будет использовать null-значение int и затем сохранить значение NULL в этом значении или сделать что-то со значением для представления значения NULL, например 0, которое можно сохранить в вашем свойстве.

...