如何将可空的INT类型传递给INSERT INTO参数

时间:2014-04-29 21:57:19

标签: c# sql parameters insert-into

我需要传入一个可以为空的int类型(作为一个OPTIONAL参数传递,有时它被定义,有时它不是......)通过参数传递到C#中的INSERT INTO命令。下面是我的代码的截图。

以下是令人讨厌的代码行,为了清晰起见而被截断...

public void WriteCustomColumns(... int? parentPlacementId = null)
{
    command.Parameters["@ParentPlacementId"].Value = (parentPlacementId == null ? System.Data.SqlTypes.SqlInt32.Null.Value : parentPlacementId);

以下是错误的屏幕截图...

screenshot

3 个答案:

答案 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

Handling Null Values in ADO.NET

答案 2 :(得分:0)

使用:

 command.Parameters["@ParentPlacementId"].Value = parentPlacementId.HasValue ? parentPlacementId.Value : System.Data.SqlTypes.SqlInt32.Null.Value;

参考微软 Using Nullable Type