Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Por que o construtor de nome/valor SqlParameter trata 0 como nulo?


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.