为什么我得到这个错误?

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.ValueInt64为你的代码试图在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,然后存储空的值或者做一些与值来表示空,如0可以存储在你的财产。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top