Operatore '??' non può essere applicato a operandi di tipo 'stringa' e 'System.DBNull'

StackOverflow https://stackoverflow.com/questions/4153009

  •  08-10-2019
  •  | 
  •  

Domanda

Ho il seguente codice C #:

sqlCommand.Parameters.AddWithValue("@Parameter", table.Value ?? DBNull.Value);

Ma getta il seguente errore di compilazione:

  

?? operatore non può essere applicato a operandi di tipo string e System.DBNull

Perché il compilatore non permette questa sintassi?

È stato utile?

Soluzione

Entrambi gli operandi devono essere oggetto. Utilizzare cast esplicito:

(object)table.Value ?? DBNull.Value;

Altri suggerimenti

Non v'è alcuna conversione automatica tra string e System.DBNull e quindi è necessario specificare il tipo che si desidera in modo esplicito con l'aggiunta di un cast di object:

sqlCommandObject.Parameters.AddWithValue("@Parameter",
                                         table.Value ?? (object)DBNull.Value);

E 'perché non v'è alcuna conversione implicita tra string e System.DBNull.

Invece di usare DBNull.Value, è possibile utilizzare Convert.DBNull:

sqlCommand.Parameters.AddWithValue("@Parameter", table.Value ?? Convert.DBNull);

Credo che dietro le quinte è fondamentalmente facendo la stessa / simile cosa come detto in altri esempi (vale a dire la fusione DBNull a oggetto), ma rende un po 'più semplice / conciser.

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