Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Pourquoi le constructeur nom/valeur SqlParameter traite-t-il 0 comme null ?

Comme indiqué dans la documentation pour ce constructeur :

Vous appeliez simplement un constructeur différent de celui que vous pensiez dans votre cas.

La raison en est que C # permet une implicite conversion à partir du littéral entier 0 en types enum (qui ne sont que des types intégraux en dessous), et cette conversion implicite provoque le (string, SqlDbType) le constructeur correspond mieux à la résolution de surcharge que la conversion de boxe nécessaire pour convertir int à object pour le (string, object) constructeur.

Cela ne sera jamais un problème lorsque vous passerez un int variable , même si la valeur de cette variable est 0 (car ce n'est pas un littéral nul), ou toute autre expression de type int . Cela ne se produira pas non plus si vous castez explicitement le int à object comme vu ci-dessus, car il n'y a alors qu'une seule surcharge correspondante.