Pregunta

Me acabo de leer la respuesta en la parte superior de este mensaje:
inserción de cuerda o NULL en la base de datos de SQL Server

Me corregirá si me equivoco, pero puedo el ?? -. Operador no sólo se puede utilizar de dos variables del mismo tipo, si no me sería de gran aprecio, si alguien puede resolver mi problema menor

He intentado insertar un código en mi proyecto similar a la de abajo.

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);
}

Sin embargo, Visual Studio se queja con el siguiente mensaje:
" '??' Operador no se puede aplicar a operandos de tipo 'cadena' y 'System.DBNull'"

¿Fue útil?

Solución

DBNull y Null no son del mismo tipo, ni son tipos anulables o tipos de referencia y DBNull. Sólo se puede utilizar ?? con valores del mismo tipo.

Uno puede pensar en el ?? como operador de azúcar sintáctico para:

(left != null) ? left : right

Y la operación ternaria requiere tanto a la izquierda ya la derecha de ser del mismo tipo, por lo que, por tanto, a la izquierda y derecha de la ?? operador también debe ser del mismo tipo.

Así que, por desgracia, no .. no puede hacerlo de esta manera, al menos no sin una cierta colada fea.?

Otros consejos

Probar:

cmd.Parameters.AddWithValue(param, (object)strings[param] ?? DBNull.Value);
    cmd.Parameters.AddWithValue(param, strings[param] == null ? DBNull.Value : strings[param]);

único defecto es que lo hará el diccionario mirar hacia arriba dos veces!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top