私は次のC#コードを持っています:
sqlCommand.Parameters.AddWithValue("@Parameter", table.Value ?? DBNull.Value);
ただし、次のコンパイルエラーがスローされます。
タイプおよびタイプのオペランドに演算子
??
を適用することはできませんstring
System.DBNull
コンパイラがこの構文を許可しないのはなぜですか?
両方のオペランドはオブジェクトである必要があります。明示的なキャストを使用します。
(object)table.Value ?? DBNull.Value;
string
との間には自動変換がないSystem.DBNull
ため、キャストを追加して明示的に必要なタイプを指定する必要がありますobject
。
sqlCommandObject.Parameters.AddWithValue("@Parameter",
table.Value ?? (object)DBNull.Value);
DBNull.Valueを使用する代わりに、Convert.DBNullを使用できます。
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
など