是否有更优雅的形式为InsertCommand的NVarChar分配NULL?

sca*_*moi 3 c# sql-server sqldataadapter sql-insert

这段代码非常适合我:

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

但我的直觉告诉我,可能有一个单行版本.就像是:

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

但是我上面发布的单线程当然失败了,因为DBNull.Value没有强制转换为String.

有没有办法完成我想要的一个班轮?

cad*_*ll0 6

您可以将someStr转换为对象

例如:

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

或者你可以像Oded和Servy那样建议并使用扩展方法.虽然它可能会添加几行代码,但它可以避免重复代码.

正如Servy指出的那样,戴上它object可能会导致混乱.出于这个原因,我会穿上它SqlParameter

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

然后像这样使用它

da.InsertCommand.Parameters.Add("@SOMESTR", SqlDbType.NVarChar).SetValue(someStr);
Run Code Online (Sandbox Code Playgroud)