0

この投稿でトップの回答を読んだところです:
SQL Server データベースに文字列または NULL を挿入する際の問題

私が間違っている場合は修正してください。ただし、??演算子は同じタイプの2つの変数で使用できるだけではありません.

以下のようなコードをプロジェクトに挿入しようとしました。

Dictionary<string, string> strings = new Dictionary<string, string>()
{
    {"@param0", strParam0},
    {"@param1", strParam1},
    {"@param2", strParam2}
};
foreach (string param in strings.Keys)
{
    cmd.Parameters.AddWithValue(param, strings[param] ?? DBNull.Value);
}

しかし、Visual Studio は次のメッセージで不平を言います:
"Operator '??' タイプ 'string' および 'System.DBNull' のオペランドには適用できません"

4

3 に答える 3

4

試す:

cmd.Parameters.AddWithValue(param, (object)strings[param] ?? DBNull.Value);
于 2009-02-27T10:09:43.153 に答える
0

DBNull と Null は同じ型ではなく、null 許容型または参照型と DBNull も同じではありません。のみ使用できますか?? 同じ型の値を持つ。

?? を考えることができます。次の構文シュガーとしての演算子:

(left != null) ? left : right

また、三項演算では、左と右の両方が同じ型である必要があるため、?? の左と右は 演算子も同じ型でなければなりません。

したがって、残念ながら、いいえ..少なくとも醜いキャストなしでは、この方法ではできません。

于 2009-02-27T10:08:45.357 に答える
0
    cmd.Parameters.AddWithValue(param, strings[param] == null ? DBNull.Value : strings[param]);

唯一の欠点は、辞書を 2 回検索することです。

于 2009-02-27T10:18:51.523 に答える