È DBNull.Value richiesto per i tipi nullable come SqlCommandParameter.Value
Domanda
Quale approccio è raccomandato:
void Add(int? value)
{
command.Parameters.Add("@foo").Value = value;
}
o
void Add(int? value)
{
command.Parameters.Add("@foo").Value = (object)value ?? DBNull.Value;
}
Soluzione
Se si desidera passare un valore null in un parametro, è necessario passare DBNull.Value
come nel tuo secondo esempio.
Se si assegna null
come valore del parametro, il parametro non verrà inviato alla procedura, che renderà la procedura di chiamata a non riuscire (se richiesto il parametro) oppure utilizzare il valore predefinito per il parametro, che può o non può essere nullo.
Altri suggerimenti
Dipende dalla funzionalità desiderata.
Se si passa null
come valore allora la SqlCommand tratterà che lo stesso come se il parametro non era stato passato a tutti. Se si tratta di un parametro obbligatorio, ad esempio, una stored procedure allora che farà sì che i vostri dati di sicuro.
Se si passa DBNull.Value
poi lo SqlCommand che tratterà come SQL nulla viene passato.