C# SqlParameter オブジェクトでの Null 値の処理
三項演算子 (?:) を使用して null 値を SqlParameter
オブジェクトに直接割り当てると、多くの場合、「DBNull から int への暗黙的な変換がありません」のような型不一致エラーが発生します。 これは、三項演算子では両方の式が互換性のある型である必要があり、int
と DBNull
には互換性がないために発生します。
推奨される解決策: Null 合体演算子 (??) と明示的なキャスト
最も効率的で読みやすいソリューションは、null 合体演算子 (??) を活用します。この演算子は、左側のオペランドが null でない場合はそれを返すことにより、null 値をエレガントに処理します。それ以外の場合は、右側のオペランドを返します。 への明示的なキャストと組み合わせることで、型の互換性が保証されます:object
<code class="language-csharp">SqlParameter[] parameters = new SqlParameter[1]; SqlParameter planIndexParameter = new SqlParameter("@AgeIndex", SqlDbType.Int); planIndexParameter.Value = (object)AgeItem.AgeIndex ?? DBNull.Value; parameters[0] = planIndexParameter;</code>
値の使用を試みます。 null の場合、デフォルトは AgeItem.AgeIndex
です。 DBNull.Value
キャストにより、式は常にオブジェクトを返し、三項演算子の要件を満たします。(object)
代替: 条件付きキャスト
あまり簡潔ではありませんが、条件付きキャストでも目的の結果が得られます。
<code class="language-csharp">SqlParameter[] parameters = new SqlParameter[1]; SqlParameter planIndexParameter = new SqlParameter("@AgeIndex", SqlDbType.Int); planIndexParameter.Value = (AgeItem.AgeIndex == null) ? (object)DBNull.Value : (object)AgeItem.AgeIndex; parameters[0] = planIndexParameter;</code>
と DBNull.Value
の両方を AgeItem.AgeIndex
にキャストします。object
重要な注意事項: 型エラーを回避する鍵は、三項演算子の式で型の一貫性を確保することにあります。 などの共通型への明示的なキャストは、null 許容値やデータベース パラメーターを扱う場合に重要です。 null 合体演算子は、この特定のシナリオに対して、よりエレガントで読みやすいソリューションを提供します。object
以上がC# で SqlParameter に NULL 値を適切に割り当てる方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。