sql >> Base de Datos >  >> RDS >> Sqlserver

¿Por qué el constructor de nombre/valor SqlParameter trata 0 como nulo?

Como se indica en la documentación para ese constructor:

Simplemente estabas llamando a un constructor diferente de lo que pensabas en tu caso.

La razón de esto es que C# permite un implícito conversión del literal entero 0 a tipos de enumeración (que son solo tipos integrales debajo), y esta conversión implícita hace que (string, SqlDbType) constructor sea una mejor combinación para la resolución de sobrecarga que la conversión de boxeo necesaria para convertir int a object para el (string, object) constructor.

Esto nunca será un problema cuando pasas un int variable , incluso si el valor de esa variable es 0 (porque no es un literal cero), o cualquier otra expresión que tenga el tipo int . Tampoco sucederá si lanza explícitamente el int a object como se ve arriba, porque entonces solo hay una sobrecarga coincidente.