C# 将字符串或NULL插入SQL Server数据库时出现问题

C# 将字符串或NULL插入SQL Server数据库时出现问题,c#,operators,dbnull,C#,Operators,Dbnull,我刚刚在这篇帖子上看到了最上面的答案: 如果我错了,请纠正我,但是???运算符不仅可以用于同一类型的两个变量吗?如果不是,如果有人能解决我的小问题,我将不胜感激 我试图在我的项目中插入一些类似于下面的代码 Dictionary<string, string> strings = new Dictionary<string, string>() { {"@param0", strParam0}, {"@param1", strParam1}, {"

我刚刚在这篇帖子上看到了最上面的答案:

如果我错了,请纠正我,但是???运算符不仅可以用于同一类型的两个变量吗?如果不是,如果有人能解决我的小问题,我将不胜感激

我试图在我的项目中插入一些类似于下面的代码

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);
}
字典字符串=新字典()
{
{@param0”,strParam0},
{@param1”,strParam1},
{“@param2”,strParam2}
};
foreach(strings.Keys中的字符串参数)
{
cmd.Parameters.AddWithValue(param,strings[param]??DBNull.Value);
}
但VisualStudio抱怨如下:

运算符“??”不能应用于“string”和“System.DBNull”类型的操作数

DBNull和Null不是同一类型,可为Null的类型或引用类型与DBNull也不是同一类型。你只能用??具有相同类型的值

你能想到的??运算符作为语法糖用于:

(left != null) ? left : right
三元运算要求左和右都是同一类型,所以左和右都是??运算符也必须是同一类型


所以,不幸的是,没有。。这样做是不可能的,至少必须进行一些难看的转换。

DBNull和Null不是同一类型,可为Null的类型或引用类型与DBNull也不是同一类型。你只能用??具有相同类型的值

你能想到的??运算符作为语法糖用于:

(left != null) ? left : right
三元运算要求左和右都是同一类型,所以左和右都是??运算符也必须是同一类型

所以,不幸的是,没有。。你不能这样做,至少不能没有一些难看的演员。

试试:

cmd.Parameters.AddWithValue(param, (object)strings[param] ?? DBNull.Value);
尝试:

唯一的缺陷是它会使字典查找两次


唯一的缺陷是它会使字典查找两次

还有一个缺陷-它无法编译!无论是否使用??或者?:对于这个。*尝试它*你是对的。。。它需要(object)DBNull.values上面的技巧还有另一个缺陷-它无法编译!无论是否使用??或者?:对于这个。*尝试它*你是对的。。。它需要在(object)DBNull.Value上使用技巧