3

为什么我会收到此错误?

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;
4

3 回答 3

5

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

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

于 2010-01-26T05:05:11.033 回答
1

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

所以你需要做的是检查DBNull.

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

于 2010-01-26T05:02:00.603 回答
0

DBNull 不会转换为 Int64。您将需要使用可为空的 int,然后将 null 存储在值中,或者对值执行一些操作来表示可以存储在您的属性中的 null,例如 0。

于 2010-01-26T05:06:32.000 回答