是否有更简洁和笨拙的方法来使 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
而不是空字符串。
我有将记录插入 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
而不是空字符串。