DBNull cast to (object) returns different value

508 views Asked by At

I am trying to write DBNull.Value using Parameters.AddWithVallue when an optional parameter (a string) of a C# method is 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);

However, (object)DBNULL returns two different values in two different working ways. One writes empty/null and other NULL.

enter image description here

1

There are 1 answers

6
recursive On BEST ANSWER

I'm going to make a few assumptions, but I think I know what's going on. municipio is probably an empty string. It is not null.

In that case, municipio ?? (object)DBNull.Value will be an empty string, not null. However, municipio.Length > 0 ? municipio : (object)DBNull.Value has a value of DBNull.Value, which will generate a null in SQL Server. In this case, if municipio is null, then this code will throw. Since you say the code runs, I'm assuming that municipio is not null.