Search code examples
c#sql-serversql-insertsqldataadapter

Is there a more elegant form for assigning NULL to InsertCommand's NVarChar?


This code works for me very well:

if (someStr == null)
  da.InsertCommand.Parameters.Add("@SOMESTR", SqlDbType.NVarChar).Value = DBNull.Value;
else
  da.InsertCommand.Parameters.Add("@SOMESTR", SqlDbType.NVarChar).Value = someStr;

But my intuition tells me that there may be a one-liner version of it. Something like:

  da.InsertCommand.Parameters.Add("@SOMESTR", SqlDbType.NVarChar).Value = someStr==null ? DBNull.Value : someStr ;

But the one-liner I just posted above fails of course because DBNull.Value doesn't cast to String.

Is there a way to accomplish the one liner I so desire?


Solution

  • You could cast someStr to an object

    For example:

    da.InsertCommand.Parameters.Add("@SOMESTR", SqlDbType.NVarChar).Value = someStr==null ? DBNull.Value : (object)someStr;
    

    Or you could do as Oded and Servy suggested and use an extension method. While it may add a few lines of code it will save you from duplicate code.

    As Servy pointed out, putting it on object could lead to clutter. For this reason I would put it on SqlParameter

    public static void SetValue(this SqlParameter parameter, object value)
    {
        parameter.Value = value == null ? DBNull.Value : value;
    }
    

    Then use it like so

    da.InsertCommand.Parameters.Add("@SOMESTR", SqlDbType.NVarChar).SetValue(someStr);