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'"

Foi útil?

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!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top