Domanda

Ho appena letto la risposta superiore a questo post:
inserimento di stringa o NULL nel database di SQL Server

Mi corregga se sbaglio, ma può il ?? -. Operatore non essere usato solo da due variabili dello stesso tipo, se non sarei molto grato, se qualcuno potrebbe risolvere il mio problema minore

Ho cercato di inserire del codice nel mio progetto simile a quello qui sotto.

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

Ma Visual Studio si lamenta con il seguente messaggio:
"Operatore '??' non può essere applicato a operandi di tipo 'stringa' e 'System.DBNull'"

È stato utile?

Soluzione

DBNull e Null non sono dello stesso tipo, né sono tipi nullable o tipi di riferimento e DBNull. È possibile utilizzare solo ?? con valori dello stesso tipo.

Si può pensare alla ?? operatore zucchero sintattico per:

(left != null) ? left : right

E l'operazione ternario richiede sia a sinistra ea destra per essere dello stesso tipo, in modo da quindi a sinistra ea destra del ?? operatore deve anche essere dello stesso tipo.

Così, purtroppo, no .. non si può fare in questo modo, almeno non senza qualche brutta casting.

Altri suggerimenti

Prova:

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

L'unico difetto è che si farà il dizionario cercare due volte!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top