2010-05-05 18 views
1

J'ai un DataReader et un StringBuilder (C# .NET) utilisés de la manière suivante;SQL DataReader comment afficher les valeurs nulles de la requête

while (reader.Read()) 
{ 
    sb.AppendFormat("{0},{1},{2},",reader["Col1"], reader["Col2"], reader["Col3"]); 
} 

Ce qui fonctionne très bien pour mon usage, mais quand une ligne est nul je en ai besoin pour revenir « null », au lieu de « ». Quel serait un bon moyen d'accomplir cela?

suggestions sont très appréciés

Répondre

4

Essayez:

Convert.IsDBNull(reader["Col1"]) ? "null" : reader["Col1"] 

Sinon, si vous allez utiliser cela à plusieurs reprises, ce qui est probablement un candidat idéal pour une méthode d'extension bien scope, par exemple:

public static class ExtensionMethods 
{ 
    public static object GetValueOrNull(this SqlDataReader reader, string key) 
    { 
     return Convert.IsDBNull(reader[key]) ? (object)"null" : reader[key]; 
    } 
} 

Vous pouvez alors écrire:

var valueOfReader = reader.GetValueOrNull("Col1"); 

Ce qui serait certainement rendre les choses plus net si vous avez besoin d'utiliser cette logique à plusieurs reprises dans un StringBuilder.AppendFormat appel:

while (reader.Read()) 
{ 
    sb.AppendFormat("{0},{1},{2},",reader.GetValueOrNull("Col1"), reader.GetValueOrNull("Col2"), reader.GetvalueOrNull("Col3")); 
} 
+0

Bonne réponse! Merci beaucoup d'avoir pris le temps d'écrire tout cela. – cc0

+0

Bien sûr, si vous avez descendu la route de la méthode d'extension, vous pouvez retourner n'importe quoi (comme une valeur que vous passez) si elle est nulle, pas seulement "null" - ce qui la rendrait plus flexible =) – Rob

+0

@ cc0, non problemo =) – Rob

4
reader["Col1"] == DBNull.Value ? "null" : Convert.ToString(reader["Col1"]) 
+0

J'ai voté pour supprimer ma réponse, qui était la même . J'étais quelques secondes trop tard! – sgmeyer

+0

Simple et rapide, merci beaucoup! – cc0

1
reader.IsDBNull(indexOfColumn) ? "null" : reader[indexOfColumn].ToString(); 
1
(string)reader["Col1"] ?? "null"