J'écris une routine C# pour appeler un proc stocké. Dans la liste de paramètres que je passe, il est possible que l'une des valeurs puisse légalement être nulle. Donc, je pensais que j'utiliser une ligne comme celui-ci:Est-il possible de fusionner string et DBNull en C#?
cmd.Parameters.Add(new SqlParameter("@theParam", theParam ?? DBNull.Value));
Malheureusement, cela renvoie l'erreur suivante:
CS0019: Operator '??' cannot be applied to operands of type 'string' and 'System.DBNull'
Maintenant, cela semble assez clair, mais je ne comprends pas la raison d'être il. Pourquoi cela ne fonctionnerait-il pas? (Et souvent, quand je ne comprends pas pourquoi quelque chose ne fonctionne pas, ce n'est pas que ça ne fonctionne pas ... c'est que je me trompe.)
Dois-je vraiment étirer cela dans une déclaration si-alors plus long? En outre, pour ceux qui suggèrent d'utiliser simplement "null" tel quel, cela ne fonctionne pas.Je pensais à l'origine que null serait traduit automatiquement en DBNull, mais il ne semble pas. Qui savait?))
Pour l'information, les commandes créées par un CommandBuilder ont un ensemble des paramètres construits pour vous. Cependant, le même problème se pose en ce que vous ne pouvez pas vous attendre à passer null à l'un des paramètres dans le ParameterCollection généré. vous devez encore faire comme décrit ci-dessus. – rohancragg
Belle solution simple :-) – IrishChieftain
Vous pouvez également créer une méthode d'extension pour ce faire. –