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

时间:2009-02-27 10:04:37

标签: c# operators dbnull

我刚刚在这篇文章中读到了最佳答案:
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'“

类型的操作数

3 个答案:

答案 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]);

唯一的缺点就是字典会查找两次!