Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Perché il costruttore nome/valore SqlParameter considera 0 null?

Come indicato nella documentazione per quel costruttore:

Stavi semplicemente chiamando un costruttore diverso da quello che pensavi nel tuo caso.

Il motivo è che C# consente un implicito conversione dal valore letterale intero 0 per enumerare i tipi (che sono solo tipi integrali sottostanti), e questa conversione implicita provoca il (string, SqlDbType) costruttore per essere una corrispondenza migliore per la risoluzione dell'overload rispetto alla conversione boxing necessaria per convertire int a object per il (string, object) costruttore.

Questo non sarà mai un problema quando passi un int variabile , anche se il valore di quella variabile è 0 (perché non è un valore letterale zero) o qualsiasi altra espressione che abbia il tipo int . Inoltre, non accadrà se trasmetti esplicitamente int a object come visto sopra, perché allora c'è solo un sovraccarico corrispondente.