Problema inserindo corda ou NULL no banco de dados SQL Server
Pergunta
Acabei de ler a resposta de topo a este post:
Problema inserindo corda ou NULL no banco de dados SQL Server
me corrija se eu estiver errado, mas pode o ?? -. Operador não só ser usado em duas variáveis ??do mesmo tipo, se não eu agradeceria muito, se alguém poderia resolver o meu problema menor
Eu tentei inserir algum código no meu projeto semelhante ao abaixo.
Dictionary<string, string> strings = new Dictionary<string, string>()
{
{"@param0", strParam0},
{"@param1", strParam1},
{"@param2", strParam2}
};
foreach (string param in strings.Keys)
{
cmd.Parameters.AddWithValue(param, strings[param] ?? DBNull.Value);
}
Mas Visual Studio reclama com a seguinte mensagem:
"Operador '??' não pode ser aplicado a operandos do tipo 'string' e 'System.DBNull'"
Solução
DBNull e nulo não são do mesmo tipo, nem são tipos anuláveis ??ou tipos de referência e DBNull. Você só pode usar ?? com os valores do mesmo tipo.
Pode-se pensar no ?? operador açúcar sintático para:
(left != null) ? left : right
E a operação ternária requer tanto a esquerda e direita para ser do mesmo tipo, assim, portanto, à esquerda e direita do ?? operador também deve ser do mesmo tipo.
Então, infelizmente, não .. você não pode fazê-lo desta maneira, pelo menos não sem algum vazamento feio.
Outras dicas
Tente:
cmd.Parameters.AddWithValue(param, (object)strings[param] ?? DBNull.Value);
cmd.Parameters.AddWithValue(param, strings[param] == null ? DBNull.Value : strings[param]);
Apenas falha é que ele vai fazer o olhar dicionário duas vezes!