29

我有以下 C# 代码:

sqlCommand.Parameters.AddWithValue("@Parameter", table.Value ?? DBNull.Value);

但它会引发以下编译错误:

运算符??不能应用于类型stringSystem.DBNull

为什么编译器不允许这种语法?

4

5 回答 5

47

两个操作数都必须是对象。使用显式强制转换:

(object)table.Value ?? DBNull.Value;
于 2010-11-11T09:39:59.100 回答
18

string和and之间没有自动转换System.DBNull,因此您需要通过添加强制转换来明确指定所需的类型object

sqlCommandObject.Parameters.AddWithValue("@Parameter",
                                         table.Value ?? (object)DBNull.Value);
于 2010-11-11T09:40:50.973 回答
13

您可以使用 Convert.DBNull,而不是使用 DBNull.Value:

sqlCommand.Parameters.AddWithValue("@Parameter", table.Value ?? Convert.DBNull);

我相信在幕后它基本上是在做与其他示例中提到的相同/相似的事情(即将 DBNull 转换为对象),但它使它更简单/简洁。

于 2018-08-20T18:31:48.777 回答
8

string这是因为和之间没有隐式转换System.DBNull

于 2010-11-11T09:38:54.750 回答
2

另一种解决方法是利用SqlString.Null.

前任:command.Parameters.Add(new SqlParameter("@parameter", parameter ?? SqlString.Null));

每种类型都有自己的版本。 SqlGuid.Null, SqlDateTime.Null, 等

于 2019-10-29T15:00:20.557 回答