Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Quelle est la meilleure façon de gérer les DBNull

Les types nullables sont bons, mais uniquement pour les types qui ne sont pas nullables au départ.

Pour rendre un type "nullable", ajoutez un point d'interrogation au type, par exemple :

int? value = 5;

Je recommanderais également d'utiliser le "as " au lieu de transtyper. Vous ne pouvez utiliser le mot-clé "as" que sur des types nullables, alors assurez-vous de transtyper des éléments qui sont déjà nullables (comme des chaînes) ou que vous utilisez des types nullables comme mentionné ci-dessus. Le raisonnement est

  1. Si un type est nullable, le "as " le mot-clé renvoie null si une valeur est DBNull .
  2. C'est un peu plus rapide que le casting, mais seulement dans certains cas. Cela en soi n'est jamais une raison suffisante pour utiliser as , mais avec la raison ci-dessus, c'est utile.

Je recommanderais de faire quelque chose comme ça

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

Dans le cas ci-dessus, si row revient en tant que DBNull , puis value deviendra null au lieu de lancer une exception. Sachez que si votre requête DB modifie les colonnes/types renvoyés, utiliser as entraînera l'échec silencieux de votre code et rendre les valeurs simples null au lieu de lancer l'exception appropriée lorsque des données incorrectes sont renvoyées, il est recommandé de mettre en place des tests pour valider vos requêtes d'autres manières afin de garantir l'intégrité des données à mesure que votre base de code évolue.