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.