DBNull cast to (object) returns different value [c

2019-10-04 15:17发布

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条回答
一纸荒年 Trace。
2楼-- · 2019-10-04 16:01

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.

查看更多
登录 后发表回答