繁体   English   中英

使用C#中的对象变量将AddWithValue中的DBNull设置为null

[英]null to DBNull in AddWithValue using object variable in C#

我正在尝试将C#方法的可选参数转换为DBNull (如果为null ),以与Parameter.AddWithValue方法一起添加。

我看到了许多解决方案( 使用SqlCommand +参数将数据库值设置为null ),扩展方法等,但是我想要一个单行解决方案。

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

但是以某种方式,我无法使其像这样工作,也许我缺少某些语法(我尝试了许多括号/等组合)。

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

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

            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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM