ホームページ >バックエンド開発 >C++ >Null 許容 SQL Server パラメーターを処理する際の「DBNull から int への暗黙的な変換がありません」エラーを回避する方法

Null 許容 SQL Server パラメーターを処理する際の「DBNull から int への暗黙的な変換がありません」エラーを回避する方法

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-10 22:47:441002ブラウズ

How to Avoid

SQL Server パラメータ設定時の Null 許容値のアドレス指定

SqlParameter オブジェクトを操作する場合、null 許容値の処理には細心の注意が必要です。 Null 値を整数パラメータ (例: SqlDbType.Int) に直接代入すると、「DBNull から int への暗黙的な変換がありません」というエラーが発生することがよくあります。これは型の互換性がないために発生します。

この問題は通常、条件演算子 (?:) を使用するときに発生します。 この演算子は、int または DBNull.

の可能性を処理するときに一貫した戻り値の型を決定するのに苦労します。

解決策: オブジェクト キャストの採用

効果的なアプローチの 1 つは、null 許容値を object にキャストすることです。 objectintDBNull の両方の値に対応できるため、これにより型のあいまいさが解決されます。

<code class="language-csharp">SqlParameter planIndexParameter = new SqlParameter("@AgeIndex", SqlDbType.Int);
planIndexParameter.Value = (object)AgeItem.AgeIndex ?? DBNull.Value;</code>

解決策: Null-Coalescing Operator の活用

別の解決策は、null 合体演算子 (

) を利用します。この演算子は、左側のオペランドが null でない場合、それをエレガントに返します。それ以外の場合は、右側のオペランドを返します。??

<code class="language-csharp">SqlParameter planIndexParameter = new SqlParameter("@AgeIndex", SqlDbType.Int);
planIndexParameter.Value = AgeItem.AgeIndex ?? DBNull.Value;</code>
重要なのは、

が null の場合、AgeItem.AgeIndex は SQL Server の null 値表現である planIndexParameter.Value に設定されます。DBNull.Value

これらのメソッドのいずれかを実装すると、

オブジェクト内の null 値を確実に処理でき、一般的なエラーを防ぐことができます。SqlParameter

以上がNull 許容 SQL Server パラメーターを処理する際の「DBNull から int への暗黙的な変換がありません」エラーを回避する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。