【问题标题】:null to DBNull in AddWithValue using object variable in C#在 C# 中使用对象变量在 AddWithValue 中将 null 转换为 DBNull
【发布时间】:2017-01-05 05:08:32
【问题描述】:

我正在尝试使用 Parameter.AddWithValue 方法将 C# 方法的可选参数转换为 DBNull(如果是 null)。

我看到了很多解决方案 (Set a database value to null with a SqlCommand + parameters)、扩展方法等,但我想要一个单行解决方案。

command.Parameters.AddWithValue("@Municipio", municipio ?? DBNull.Value)don't work(运算符'??'不能应用于'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);

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

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

【问题讨论】:

  • 另一个选项是command.Parameters.AddWithValue("@Municipio", municipio ?? DBNull.Value)
  • 我试过但Operator '??' cannot be applied to operands of type 'string' and 'System.DBNull'
  • 对不起。应该是command.Parameters.AddWithValue("@Municipio", municipio ?? (object)DBNull.Value)
  • 这种方式可行,但请看这里 (stackoverflow.com/questions/41473095/…),以便我更好地了解您的“相同”答案的区别。

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


【解决方案1】:

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

            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)

【讨论】:

  • 这不检查值是否为空,这是问题具体要求的(查询空值的长度将抛出 NullReferenceException)
  • 这种方式可行,但我在这里等待答案 (stackoverflow.com/questions/41473095/…) 以更好地理解 @stuartd 所做的观察。
  • 谢谢斯图尔特!如果未设置变量,我已更新我的答案以处理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 1970-01-01
  • 2012-03-21
相关资源
最近更新 更多