是否有更简洁和笨拙的方法来使 otherwise-null SQL 参数安全?

Is there a less verbose and kludgy way to make otherwise-null SQL parameters safe?

我有将记录插入 SQL 服务器 table 的代码,在某些情况下,该服务器有一些空值(如果没有先用伪空(空)值替换)。具体来说,它们是 varchars。

如果我不检查 null 并在这些情况下分配 string.empty:

if (null == _PatternOrdinal)
{
    rs.PatternOrdinal = string.Empty;
}
else
{
    rs.PatternOrdinal = _PatternOrdinal;
}

...它抛出异常,“参数化查询'(@Unit varchar(25),@ReportID int,@NextExecution datetime,@NextEx'需要参数'@PatternOrdinal',未提供。"

IOW,如果代码只是这样:

rs.PatternOrdinal = _PatternOrdinal;

...而不是上面的 if 块,它崩溃了。

所以我必须用几个参数来做到这一点。有没有更简洁的方法来避免这种周期性的脱轨?

您可以使用 null-coalescing operator:

rs.PatternOrdinal = _PatternOrdinal ?? string.Empty;

它 returns 如果操作数不为空,则为左侧操作数;否则它 returns 右手操作数。

但请注意,空字符串和 null 值不同。空字符串仍然是一个值,但是 null 表示没有定义值。

在需要保存 null 值的情况下,您应该使用 DbNull.Value 而不是空字符串。