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との間には自動変換がないSystem.DBNullため、キャストを追加して明示的に必要なタイプを指定する必要がありますobject

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

DBNull.Valueを使用する代わりに、Convert.DBNullを使用できます。

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 に答える