Operator '??' cannot be applied to operands of type 'string' and 'System.DBNull'

16,607

Solution 1

Both operands need to be object. Use explicit cast:

(object)table.Value ?? DBNull.Value;

Solution 2

There is no automatic conversion between string and System.DBNull and so you need to specify the type you want explicitly by adding a cast to object:

sqlCommandObject.Parameters.AddWithValue("@Parameter",
                                         table.Value ?? (object)DBNull.Value);

Solution 3

Instead of using DBNull.Value, you can use Convert.DBNull:

sqlCommand.Parameters.AddWithValue("@Parameter", table.Value ?? Convert.DBNull);

I believe behind the scenes it is basically doing the same/similar thing as mentioned in other examples (i.e. casting DBNull to object), but it makes it a little simpler/conciser.

Solution 4

It's because there is no implicit conversion between string and System.DBNull.

Solution 5

Another workaround is to utilize SqlString.Null.

ex: command.Parameters.Add(new SqlParameter("@parameter", parameter ?? SqlString.Null));

Each type has its own version. SqlGuid.Null, SqlDateTime.Null, etc

Share:
16,607
hwcverwe
Author by

hwcverwe

Wilfred Verweij Bachelor of ICT since 2010 Mission Critical Engineer by Schuberg Philis Mainly .Net and Microsoft Azure oriented.

Updated on June 15, 2022

Comments

  • hwcverwe
    hwcverwe almost 2 years

    I have the following C# code:

    sqlCommand.Parameters.AddWithValue("@Parameter", table.Value ?? DBNull.Value);
    

    But it throws the following compilation error:

    Operator ?? cannot be applied to operands of type string and System.DBNull

    Why doesn't the compiler allow this syntax?