我有以下 C# 代码:
sqlCommand.Parameters.AddWithValue("@Parameter", table.Value ?? DBNull.Value);
但它会引发以下编译错误:
运算符
??不能应用于类型string和System.DBNull
为什么编译器不允许这种语法?
两个操作数都必须是对象。使用显式强制转换:
(object)table.Value ?? DBNull.Value;
string和and之间没有自动转换System.DBNull,因此您需要通过添加强制转换来明确指定所需的类型object:
sqlCommandObject.Parameters.AddWithValue("@Parameter",
table.Value ?? (object)DBNull.Value);
您可以使用 Convert.DBNull,而不是使用 DBNull.Value:
sqlCommand.Parameters.AddWithValue("@Parameter", table.Value ?? Convert.DBNull);
我相信在幕后它基本上是在做与其他示例中提到的相同/相似的事情(即将 DBNull 转换为对象),但它使它更简单/简洁。
string这是因为和之间没有隐式转换System.DBNull。
另一种解决方法是利用SqlString.Null.
前任:command.Parameters.Add(new SqlParameter("@parameter", parameter ?? SqlString.Null));
每种类型都有自己的版本。 SqlGuid.Null, SqlDateTime.Null, 等