Conforme declarado na documentação para esse construtor:
Você simplesmente estava chamando um construtor diferente do que pensava no seu caso.
A razão para isso é que C# permite um implícito conversão do literal inteiro
0 para tipos enum (que são apenas tipos integrais abaixo), e essa conversão implícita faz com que o (string, SqlDbType) construtor para ser uma combinação melhor para resolução de sobrecarga do que a conversão de boxe necessária para converter int para object para o (string, object) construtor. Isso nunca será um problema quando você passar um
int variável , mesmo que o valor dessa variável seja 0 (porque não é um literal zero), ou qualquer outra expressão que tenha o tipo int . Também não acontecerá se você converter explicitamente o int para object como visto acima, porque então há apenas uma sobrecarga correspondente.