在 C# 中使用对象变量在 AddWithValue 中将 null 转换为 DBNull
null to DBNull in AddWithValue using object variable in C#
我正在尝试将要转换为 DBNull
(如果它是 null
)的 C# 方法的可选参数添加到 Parameter.AddWithValue 方法中。
我看到了很多解决方案(Set a database value to null with a SqlCommand + parameters)、扩展方法等,但我想要一个单行解决方案。
command.Parameters.AddWithValue("@Municipio", municipio ?? DBNull.Value)
不起作用(运算符 '??' 不能应用于 'string' 和 'System.DBNull' 类型的操作数)
方法:public static void Foo(string bar, string municipio = null)
不幸的是我不能string municipio = DBNull.Value
因为"default parameter must be a compile-time constant"(我不完全理解意思)。
我能够让它这样工作:
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);
但不知何故我无法让它像这样工作,也许我缺少一些语法(我尝试了很多 parenthesis/etc 组合)。
所以我的问题是,我得到的单行解决方案是好的做法,还是应该替换它?
已更新以处理变量未初始化的情况。
这是一个例子:
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)
我正在尝试将要转换为 DBNull
(如果它是 null
)的 C# 方法的可选参数添加到 Parameter.AddWithValue 方法中。
我看到了很多解决方案(Set a database value to null with a SqlCommand + parameters)、扩展方法等,但我想要一个单行解决方案。
command.Parameters.AddWithValue("@Municipio", municipio ?? DBNull.Value)
不起作用(运算符 '??' 不能应用于 'string' 和 'System.DBNull' 类型的操作数)
方法:public static void Foo(string bar, string municipio = null)
不幸的是我不能string municipio = DBNull.Value
因为"default parameter must be a compile-time constant"(我不完全理解意思)。
我能够让它这样工作:
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);
但不知何故我无法让它像这样工作,也许我缺少一些语法(我尝试了很多 parenthesis/etc 组合)。
所以我的问题是,我得到的单行解决方案是好的做法,还是应该替换它?
已更新以处理变量未初始化的情况。 这是一个例子:
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)