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.
有没有办法完成我想要的一个班轮?
您可以将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)