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.
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 ofDBNull.Value
, which will generate a null in SQL Server. In this case, ifmunicipio
is null, then this code will throw. Since you say the code runs, I'm assuming thatmunicipio
is not null.