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?
Create a function or extension method that will do the test and make the assignments as needed. Pass in
someStr
and the parameter name.You will then be able to set the parameter in one line.
Write a stored procedure for inserting, set default value for your argument as null, Use that stored procedure for your insert command, then don't just pass that argument to that sproc..
You can use the following extension method (or make it a non-extension method if you prefer)
You can then do:
You could cast someStr to an object
For example:
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 onSqlParameter
Then use it like so