Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Qual è il modo migliore per gestire i DBNull

I tipi Nullable sono buoni, ma solo per i tipi che non sono Nullable per cominciare.

Per rendere un tipo "annullabile", aggiungi un punto interrogativo al tipo, ad esempio:

int? value = 5;

Consiglierei anche di usare "as " parola chiave invece di eseguire il cast. Puoi utilizzare la parola chiave "as" solo su tipi nullable, quindi assicurati di eseguire il casting di elementi che sono già nullable (come le stringhe) o di utilizzare tipi nullable come menzionato sopra. Il motivo è

  1. Se un tipo è annullabile, "as " la parola chiave restituisce null se un valore è DBNull .
  2. È sempre leggermente più veloce del casting, anche se solo in alcuni casi. Questo da solo non è mai un motivo sufficiente per usare as , ma insieme al motivo sopra è utile.

Consiglierei di fare qualcosa del genere

DataRow row = ds.Tables[0].Rows[0];
string value = row as string;

Nel caso precedente, se row ritorna come DBNull , quindi value diventerà null invece di generare un'eccezione. Tieni presente che se la tua query DB cambia le colonne/i tipi restituiti, utilizzando as causerà un errore silenzioso del tuo codice e rendi i valori semplici null invece di generare l'eccezione appropriata quando vengono restituiti dati errati, quindi si consiglia di disporre di test in atto per convalidare le query in altri modi per garantire l'integrità dei dati man mano che la base di codice si evolve.