DBNull 转换为 (object) returns 不同的值

DBNull cast to (object) returns different value

当 C# 方法的可选参数(string)为 null.

时,我正在尝试使用 Parameters.AddWithVallue 编写 DBNull.Value
public static void Abc(string distrito, string municipio = null)

command.Parameters.AddWithValue("@Municipio", municipio ?? (object)DBNull.Value);
command.Parameters.AddWithValue("@Municipio", municipio.Length > 0 ? municipio : (object)DBNull.Value);

但是,(object)DBNULL returns 两个不同的值以两种不同的 工作 方式。一个写 empty/null 和另一个 NULL.

我将做一些假设,但我想我知道发生了什么。 municipio 可能是一个空字符串。 不是 null。

在那种情况下,municipio ?? (object)DBNull.Value 将是一个空字符串,不是 null。但是,municipio.Length > 0 ? municipio : (object)DBNull.Value 的值为DBNull.Value,这将在SQL Server 中生成一个空值。在这种情况下,如果 municipio 为 null,则此代码将抛出。既然你说代码运行,我假设 municipio 不为空。