qual è il modo corretto di leggere da un datarow se la cella potrebbe essere nullo
Domanda
Ho il seguente codice che sembra far saltare in aria se la colonna nella datarow (dr) è nullo. qual è il modo corretto per analizzare il valore dalla riga di dati e gestire controlli nulli?
Person person = new Person()
{
FirstName = dr["FirstName"].ToString(),
LastName = dr["LastName"].ToString(),
BusinessPhoneNumber = dr["BusinessPhone"].ToString(),
Soluzione
Se la colonna è di tipo stringa, ma è nullable, che dire di provare:
// 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
Altri suggerimenti
Credo, il beeing nulla cella di dati non può essere il motivo per il vostro problema. Forse la colonna non esiste, o qualsiasi altro errore è accaduto, o il DataRow in sé è nullo e si dovrebbe gestire questo. Guardate l'eccezione -. "Sembra far saltare in aria" non è una descrizione valida del problema
Di seguito viene spiegato che, ma sarà anche rispondere alla domanda del titolo per tutti gli altri.
Se il valore della colonna è nullo, un System.DBNull
oggetto viene restituito, e .ToString()
restituisce una stringa vuota, mentre (string)
o ritorno as string
null
.
Quindi non ha senso per controllare l'articolo restituito per ==null
perché non potrà mai valutare al true
.
- Se si accetta stringhe vuote come risultato, il codice è già ottimale, non c'è bisogno di gestire il caso
DBNull
. - Se si desidera ottenere
null
, cambiamento.ToString()
aas string
. - Se si desidera gestire in altro modo, utilizzare
if (dr.IsNull("FirstName"))
o fare==null
sulla variabile di destinazione dopo laas string
.
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"]
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.
È possibile utilizzare il seguente per restituire una stringa vuota se la colonna è nullo.
FirstName = string.format("{0}", dr["FirstName"])