【问题标题】:Problem inserting string or NULL into SQL Server database将字符串或 NULL 插入 SQL Server 数据库时出现问题
【发布时间】:2009-02-27 10:04:36
【问题描述】:

我刚刚阅读了这篇文章的最佳答案:
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'类型的操作数"

【问题讨论】:

    标签: c# operators dbnull


    【解决方案1】:

    试试:

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

    【讨论】:

      【解决方案2】:

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

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

      (left != null) ? left : right
      

      而三元运算要求左右都是同一种类型,所以左和右的??运算符也必须属于同一类型。

      所以,不幸的是,不......你不能这样做,至少在没有一些丑陋的演员表的情况下不能这样做。

      【讨论】:

        【解决方案3】:
            cmd.Parameters.AddWithValue(param, strings[param] == null ? DBNull.Value : strings[param]);
        

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

        【讨论】:

        • 还有一个缺陷——它无法编译!无论您是否使用 ?? 都不能直接从字符串转换为 DBNull或?:为此。
        • * 试试看 * 你是对的...它需要上面的技巧 (object)DBNull.Value
        猜你喜欢
        • 2016-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-18
        • 1970-01-01
        • 2011-05-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多