2009-11-21 2 views

risposta

6

Se la colonna è di tipo stringa, ma è nullable, quello di cercare:

// FirstName must allow null 
FirstName = dr["FirstName"] as string 

o

// FirstName would be empty for a NULL in the database 
FirstName = (dr["FirstName"] as string) ?? string.Empty 
+0

Le stringhe sono "nullable" per impostazione predefinita, poiché sono tipi di riferimento. –

+1

Stavo parlando della colonna e non del tipo di stringa. –

1

Far passare la colonna, e un valore predefinito per una funzione di supporto che controlla nulla e restituisce il default se nulla, o il valore della colonna, se non nullo.

2

dr["FirstName"].ToString() a volte generare eccezioni puntatore nullo perché si sta cercando di accedere a ToString su un oggetto nullo. Oltre a questo, le stringhe possono essere nullo, così davvero, se sai che è una stringa, e non si mente che è nulla, sarebbe sicuro di fare

FirstName = (String) dr["FirstName"] 
+1

Questo è sbagliato, le eccezioni del puntatore nullo non si verificano qui. Se il contenuto della colonna è nullo, viene restituito un oggetto 'System.DBNull' e' .ToString() 'restituisce una stringa vuota, mentre' (stringa) 'o' as stringa' restituisce 'null'. –

1

È possibile utilizzare il seguente per tornare una stringa vuota se la colonna è nullo.

FirstName = string.format("{0}", dr["FirstName"]) 
3

Credo che la cella dati che sta per null non può essere la ragione del tuo problema. Forse la colonna non esiste, o qualsiasi altro errore è accaduto, o il DataRow stesso è nullo e dovresti gestirlo. Guarda l'eccezione - "sembra saltare in aria" non è una descrizione valida del tuo problema.

Quanto segue spiega, ma risponderà anche alla domanda del titolo per tutti gli altri.

Se il valore della colonna è null, un oggetto System.DBNull viene restituito, e .ToString() restituisce una stringa vuota, mentre (string) o as string ritorno null.

Quindi non ha senso controllare l'articolo restituito per ==null perché non verrà mai valutato su true.

  • Se si accettano stringhe vuote come risultato, il codice è già ottimale, non è necessario gestire il caso DBNull.
  • Se si desidera ottenere null, modificare a as string.
  • Se si desidera gestirlo in qualsiasi altro modo, utilizzare if (dr.IsNull("FirstName")) oppure fare ==null sulla variabile di destinazione dopo il as string.