我刚刚在这篇文章中读到了最佳答案:
Problem inserting string or NULL into SQL Server database
如果我错了,请纠正我,但是?? - 运算符不仅可以用于同一类型的两个变量,如果不是,我会非常感激,如果有人能解决我的小问题。
我尝试在我的项目中插入一些类似于下面的代码。
Dictionary<string, string> strings = new Dictionary<string, string>()
{
{"@param0", strParam0},
{"@param1", strParam1},
{"@param2", strParam2}
};
foreach (string param in strings.Keys)
{
cmd.Parameters.AddWithValue(param, strings[param] ?? DBNull.Value);
}
但Visual Studio抱怨以下消息:
“接线员'??'不能应用于'string'和'System.DBNull'“
答案 0 :(得分:4)
尝试:
cmd.Parameters.AddWithValue(param, (object)strings[param] ?? DBNull.Value);
答案 1 :(得分:0)
DBNull和Null不是同一类型,也不是可空类型或引用类型以及DBNull。你只能用??具有相同类型的值。
可以想到??运算符作为语法糖:
(left != null) ? left : right
三元操作要求左右两者属于同一类型,因此左右两侧都是?运算符也必须属于同一类型。
所以,不幸的是,没有..你不能这样做,至少不是没有一些丑陋的演员。
答案 2 :(得分:0)
cmd.Parameters.AddWithValue(param, strings[param] == null ? DBNull.Value : strings[param]);
唯一的缺点就是字典会查找两次!