![](/img/trans.png)
[英]c# Using Parameters.AddWithValue in SqlDataAdapter
[英]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.