我需要传入一个可以为空的int类型(作为一个OPTIONAL参数传递,有时它被定义,有时它不是......)通过参数传递到C#中的INSERT INTO命令。下面是我的代码的截图。
以下是令人讨厌的代码行,为了清晰起见而被截断...
public void WriteCustomColumns(... int? parentPlacementId = null)
{
command.Parameters["@ParentPlacementId"].Value = (parentPlacementId == null ? System.Data.SqlTypes.SqlInt32.Null.Value : parentPlacementId);
以下是错误的屏幕截图...
答案 0 :(得分:2)
尽量不要使用条件运算符
SqlParameter p = command.Parameters.Add("@ParentPlacementId", SqlDbType.BigInt);
if(parentPlacementId.HasValue)
p.Value = parentPlacementId;
else
p.Value = DBNull.Value;
作为可能的替代方案(不推荐)
command.Parameters["@ParentPlacementId"].Value =
(parentPlacementId.HasValue ? (object)parentPlacementId.Value : (object)DBNull.Value);
答案 1 :(得分:2)
您的代码失败,因为当您尝试访问System.Data.SqlTypes.SqlInt32.Null
时,SqlNullValueException
会引发.Value
。
仅使用System.Data.SqlTypes.SqlInt32.Null
。
答案 2 :(得分:0)
使用:
command.Parameters["@ParentPlacementId"].Value = parentPlacementId.HasValue ? parentPlacementId.Value : System.Data.SqlTypes.SqlInt32.Null.Value;
参考微软 Using Nullable Type