DBNull.Value est nécessaire pour les types nullable comme SqlCommandParameter.Value
Question
Quelle approche est recommandée:
void Add(int? value)
{
command.Parameters.Add("@foo").Value = value;
}
ou
void Add(int? value)
{
command.Parameters.Add("@foo").Value = (object)value ?? DBNull.Value;
}
La solution
Si vous voulez passer une valeur NULL dans un paramètre, vous devez passer DBNull.Value
comme dans votre deuxième exemple.
Si vous attribuez null
comme la valeur du paramètre, le paramètre ne sera pas envoyé à la procédure, qui fera la valeur par défaut l'appel de procédure à ne réussissent pas (si le paramètre est requis) ou utiliser pour le paramètre, qui peut ou ne peut pas être nulle.
Autres conseils
Cela dépend de la fonctionnalité que vous voulez.
Si vous passez null
la valeur alors le SqlCommand traitera la même chose que si le paramètre n'a pas été passé du tout. Si c'est un paramètre requis, par exemple, une procédure stockée puis qui fera de votre requête à l'échec.
Si vous passez DBNull.Value
alors le SqlCommand traitera que nul SQL étant passé.