我有以下 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
, 等