qual è il modo corretto di leggere da un datarow se la cella potrebbe essere nullo

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

  •  21-09-2019
  •  | 
  •  

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(),
È stato utile?

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() a as string.
  • Se si desidera gestire in altro modo, utilizzare if (dr.IsNull("FirstName")) o fare ==null sulla variabile di destinazione dopo la as 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"])
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top