使用C#中的对象变量在AddWithValue中为null到DBNull

时间:2017-01-04 15:21:35

标签: c# sql-server null optional-parameters dbnull

我正在尝试将C#方法的可选参数转换为DBNull(如果它是null)以使用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,因为“默认参数必须是编译时常量”(我并不完全理解其含义)。

我能够让它成功:

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);

但不知怎的,我无法让它像这样工作,也许我错过了一些语法(我尝试了很多括号/等组合)。

所以我的问题是,我达成的单线解决方案是好的做法,还是应该更换它?

1 个答案:

答案 0 :(得分:0)

更新以处理变量未初始化。 这是一个例子:

            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)