无法将DBNULL值插入sql server

时间:2010-01-26 04:56:51

标签: c# sql-server-2005 dbnull

为什么我会收到此错误?

Object cannot be cast from DBNull to other types.

当我在sql server 2005中为numeric数据类型插入null值时

这是我的代码,

 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 个答案:

答案 0 :(得分:5)

您无法将DBNull.Value转换为Int64,因为您的代码会尝试Convert.ToInt64DBNull.Value表示“未知”或“不存在”,因此没有逻辑转换为任何其他数据类型。

如果materialIn实例是强类型DataRow的某种形式,则它将采用SetMeasurementIdNull方法,这是您需要使用的方法。如果您使用Linq to SQL或EF,则根本不需要处理DBNull,而只需编写materialIn.measurementId = null

答案 1 :(得分:1)

因为Object cannot be cast from DBNull to other types.

因此,您需要检查DBNull的值。

  

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

答案 2 :(得分:0)

DBNull未转换为Int64。您将需要使用一个可空的int,然后在值中存储null或使用值来表示null,例如0,可以存储在您的属性中。