Maison >développement back-end >C++ >Comment attribuer correctement des valeurs NULL à SqlParameter en C# ?
Gestion des valeurs nulles dans les objets C# SqlParameter
L'attribution directe de valeurs nulles à des objets SqlParameter
à l'aide de l'opérateur ternaire (?:) entraîne souvent des erreurs d'incompatibilité de type telles que "Aucune conversion implicite de DBNull en int". Cela se produit parce que l'opérateur ternaire exige que les deux expressions soient de types compatibles, et int
et DBNull
sont incompatibles.
La solution préférée : opérateur de coalescence nulle (??) et casting explicite
La solution la plus efficace et la plus lisible exploite l'opérateur de fusion nulle (??). Cet opérateur gère élégamment les valeurs nulles en renvoyant l'opérande de gauche s'il n'est pas nul ; sinon, il renvoie l'opérande de droite. Combiné avec un casting explicite vers object
, cela garantit la compatibilité des types :
<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>
Cet extrait de code tente d'abord d'utiliser la valeur AgeItem.AgeIndex
. S'il est nul, la valeur par défaut est DBNull.Value
. Le cast (object)
garantit que l'expression renvoie toujours un objet, satisfaisant les exigences de l'opérateur ternaire.
Alternative : Casting conditionnel
Bien que moins concis, un casting conditionnel permet également d'obtenir le résultat souhaité :
<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>
Cette approche vérifie explicitement la valeur null et convertit à la fois le DBNull.Value
et le AgeItem.AgeIndex
en object
pour la compatibilité.
Remarque importante : La clé pour éviter les erreurs de type réside dans la garantie de la cohérence du type dans les expressions de l'opérateur ternaire. La conversion explicite en un type commun, tel que object
, est cruciale lorsqu'il s'agit de valeurs nullables et de paramètres de base de données. L'opérateur de fusion nulle fournit une solution plus élégante et plus lisible pour ce scénario spécifique.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!