我正在尝试将要转换为DBNull
(如果是null
)的C#方法的可选参数添加到parameter.AddWithValue方法中。
我看到了许多解决方案(使用SqlCommand+参数将数据库值设置为null)、扩展方法等,但我想要一个单行解决方案。
command.Parameters.AddWithValue("@Municipio", municipio ?? DBNull.Value)
不起作用(运算符"??"不能应用于类型为"string"one_answers"System.DBNull"的操作数)
方法:public static void Foo(string bar, string municipio = null)
不幸的是,我不能执行string municipio = DBNull.Value
,因为"默认参数必须是编译时常数">(我不完全理解其含义)。
我能够做到这一点:
object obj = municipio == null ? command.Parameters.AddWithValue("@Municipio", DBNull.Value) : command.Parameters.AddWithValue("@Municipio", municipio);
我对此感到非常不舒服,这似乎是一种JavaScript的方式,我想要这样的东西:
if municipio == null ? command.Parameters.AddWithValue("@Municipio", DBNull.Value) : command.Parameters.AddWithValue("@Municipio", municipio);
但不知怎么的,我无法让它像这样工作,也许我错过了一些语法(我尝试了许多括号等组合)。
所以我的问题是,这是我达成的一行解决方案的良好实践,还是我应该取代它?
更新以处理变量未初始化的情况这里有一个例子:
OracleParameter P_COUNTYCODE = new OracleParameter("P_COUNTYCODE", OracleDbType.Varchar2);
P_COUNTYCODE.Direction = ParameterDirection.Input;
P_COUNTYCODE.Value = countyCode.Length > 0 ? countyCode : (object)DBNull.Value;
尝试:
command.Parameters.AddWithValue("@Municipio", !string.IsNullOrEmpty(municipio) > 0 ? municipio : (object)DBNull.Value)