Si vous n'utilisez pas de type nullable, la meilleure chose à faire est de vérifier si la valeur de la colonne est DBNull. Si c'est le cas, définissez votre référence à ce que vous utilisez pour null/empty pour le type de données correspondant.
DataRow row = ds.Tables[0].Rows[0];
string value;
if (row["fooColumn"] == DBNull.Value)
{
value = string.Empty;
}
else
{
value = Convert.ToString(row["fooColumn"]);
}
Comme Manu l'a dit, vous pouvez créer une classe de conversion avec une méthode de conversion surchargée par type afin de ne pas avoir à truffer votre code de blocs if/else.
J'insiste cependant sur le fait que les types nullables sont la meilleure solution si vous pouvez les utiliser. Le raisonnement est le suivant : avec les types non nuls, vous allez devoir recourir à des "chiffres magiques" pour représenter les nuls. Par exemple, si vous mappez une colonne vers une variable int, comment allez-vous représenter DBNull ? Souvent, vous ne pouvez pas utiliser 0 parce que 0 a une signification valide dans la plupart des programmes. Souvent, je vois des gens faire correspondre DBNull à int.MinValue, mais cela pourrait potentiellement être problématique aussi. Mon meilleur conseil est le suivant :
- Pour les colonnes qui peuvent être nulles dans la base de données, utilisez des types nullables.
- Pour les colonnes qui ne peuvent pas être nulles dans la base de données, utilisez des types réguliers.
Les types nullables ont été créés pour résoudre ce problème. Ceci étant dit, si vous utilisez une ancienne version du framework ou si vous travaillez pour quelqu'un qui ne connaît pas les types nullables, l'exemple de code fera l'affaire.