ストアド プロシージャを呼び出す C# ルーチンを作成しています。私が渡しているパラメーター リストでは、値の 1 つが合法的に null になる可能性があります。そこで、次のような行を使用すると思いました。
cmd.Parameters.Add(new SqlParameter("@theParam", theParam ?? DBNull.Value));
残念ながら、これは次のエラーを返します。
CS0019: 演算子 '??' タイプ「string」および「System.DBNull」のオペランドには適用できません
さて、これは十分に明確に思えますが、その背後にある理論的根拠がわかりません。なぜこれがうまくいかないのでしょうか?(そして、何かがうまくいかない理由がわからなくても、それはうまくいかないということではなく、私のやり方が間違っているということがよくあります。)
本当にこれをより長い if-then ステートメントに拡張する必要がありますか?
EDIT:(余談ですが、「null」をそのまま使用することを提案している人には、うまくいきません。最初はnullもDBNullに自動変換されると考えていましたが、明らかにそうではありません。(誰が知っていましたか?))