2008-12-18 6 views
2

La requête db à partir de laquelle renvoie des valeurs null. Comment puis-je me protéger contre cela et m'assurer que l'appelant récupère certaines données.Traitement des valeurs nulles à partir de la base de données

Le code que j'ai est:

Je peux le faire comme l'utilisation DataReader

 while (dr.Read()) 
     { 
      vo = new PlacementVO(); 
      vo.PlacementID = dr.GetString(0); 

Si j'utilise ensemble de données, cela.

obj.email = (row["email"] == DBNull.Value) ? String.Empty : Convert.ToString(row["email"]); 

Merci

Répondre

5

Il y a IsDBNull(int ordinal) si vous utilisez ordinaux (que vous êtes).

Alors:

string email = reader.IsDBNull(0) ? null : reader.GetString(0); 

Si vous travaillez avec des noms de colonne de chaîne, puis d'utiliser ce que vous devrez appeler GetOrdinal en premier lieu, par exemple:

string GetSafeString(this IDataReader reader, string name) 
{ 
    int index = reader.GetOrdinal(name); 
    return reader.IsDBNull(0) ? null : reader.GetString(0); 
} 

Bien sûr, il est plus rapide pour ne rechercher qu'une seule fois les ordinaux, pas une fois par rangée.

Une approche similaire peut être utilisée pour int? etc, ou en utilisant une valeur par défaut au lieu d'une valeur nulle.

+0

Apprécié - fonctionne un régal. – user17510

1

Une autre façon est d'ajouter isnull (colonne qui peut être nulle remplacement, lorsqu'il est null) à la requête SQL réelle. Moins de code et fonctionne sans rien faire dans le code client.

0

Utilisez une classe wrapper pour exécuter cette fonctionnalité. Un exemple can be found here. Le CSLA framework je crois a également cette fonctionnalité

Questions connexes