推荐哪种方法:
void Add(int? value)
{
command.Parameters.Add("@foo").Value = value;
}
或者
void Add(int? value)
{
command.Parameters.Add("@foo").Value = (object)value ?? DBNull.Value;
}
如果要在参数中传递空值,则需要DBNull.Value
像第二个示例中那样传递。
如果您指定null
为参数值,则参数将不会发送到过程,这将使过程调用失败(如果需要参数)或使用参数的默认值,该值可能为空,也可能不为空.
这取决于您想要的功能。
如果你null
作为值传递,那么 SqlCommand 将把它当作参数根本没有传递。如果它是例如存储过程中的必需参数,那么这将导致您的查询失败。
如果您通过DBNull.Value
了,那么 SqlCommand 会将其视为正在传递的 SQL 空值。