下面的代码给出了一个错误--“没有从DBnull到int的隐式转换”。
SqlParameter[] parameters = new SqlParameter[1];
SqlParameter planIndexParameter = new SqlParameter("@AgeIndex", SqlDbType.Int);
planIndexParameter.Value = (AgeItem.AgeIndex== null) ? DBNull.Value : AgeItem.AgeIndex;
parameters[0] = planIndexParameter;
发布于 2013-12-28 03:08:19
The accepted answer建议使用cast。但是,大多数SQL类型都有一个特殊的Null字段,可以用来避免这种转换。
例如,SqlInt32.Null
“表示可以分配给SqlInt32类的这个实例的DBNull。”
int? example = null;
object exampleCast = (object) example ?? DBNull.Value;
object exampleNoCast = example ?? SqlInt32.Null;
发布于 2010-12-30 00:52:52
除非在存储过程中指定了默认值(如果您正在使用存储过程),否则需要在SQLCommand中将DBNull.Value
作为null参数传递。最好的方法是在查询执行之前为任何缺少的参数分配DBNull.Value
,下面的foreach将完成这项工作。
foreach (SqlParameter parameter in sqlCmd.Parameters)
{
if (parameter.Value == null)
{
parameter.Value = DBNull.Value;
}
}
否则,请更改此行:
planIndexParameter.Value = (AgeItem.AgeIndex== null) ? DBNull.Value : AgeItem.AgeIndex;
如下所示:
if (AgeItem.AgeIndex== null)
planIndexParameter.Value = DBNull.Value;
else
planIndexParameter.Value = AgeItem.AgeIndex;
因为您不能在条件语句中使用不同类型的值,因为DBNull和int彼此不同。希望这能有所帮助。
发布于 2017-04-15 01:18:37
只需一行代码,尝试如下所示:
var piParameter = new SqlParameter("@AgeIndex", AgeItem.AgeIndex ?? (object)DBNull.Value);
https://stackoverflow.com/questions/4555935
复制相似问题