不能插入DBNull的值到SQL Server
-
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,然后存储空的值或者做一些与值来表示空,如0可以存储在你的财产。
不隶属于 StackOverflow