DBNull强制转换为(对象)返回不同的值

时间:2017-01-04 20:56:58

标签: c# .net sql-server ado.net dbnull

当C#方法的可选参数(DBNull.Value)为Parameters.AddWithVallue时,我正在尝试使用string撰写null

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会以两种不同的工作方式返回两个不同的值。一个写空/空和其他NULL。

enter image description here

1 个答案:

答案 0 :(得分:3)

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

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