comment get des valeurs nulles dans sqldatareader

Je reçois une ligne de la table et certains champs de cette ligne sont null . Comment puis-je get ces champs avec SqlDataReader ?

 //so_type , so_read are null able while (reader.Read()) { s.id = (Int64)reader["so_id"]; s.senderid = (Int64)reader["so_senderid"]; s.body = (ssortingng)reader["so_body"]; s.date = (ssortingng)reader["so_date"]; s.isread = (bool)reader["so_read"]; s.type = (int)reader["so_type"]; } 

Vous pouvez utiliser la méthode IsDBNull . Quelque chose comme ca:

 int ordinal_so_type=reader.GetOrdinal("so_type"); //... while(reader.Read()==true) { //reading other columns here if (reader.IsDBNull(ordinal_so_type)==false) { s.type=reader.GetInt32(ordinal_so_type); } else { //do whatever you like if the so_type column is null } } 

Vous pouvez tirer parti des generics C # pour écrire une méthode d'assistance qui extrait la valeur ou la valeur par défaut de chaque colonne pouvant être null .

 private static T GetValue<T>(object value) { return value == DBNull.Value ? default(T) : (T) value; } while (reader.Read()) { s.id = GetValue<long>(reader["so_id"]); s.senderid = GetValue<long>(reader["so_senderid"]); s.body = GetValue<ssortingng>(reader["so_body"]); s.date = GetValue<ssortingng>(reader["so_date"]); s.isread = GetValue<bool>(reader["so_read"]); s.type = GetValue<int>(reader["so_type"]); } 

Cela suppose également que la valeur est déjà le bon type.

Une implémentation de type plus sûre serait:

 private static T GetValue<T>(object value) { return value == DBNull.Value ? default(T) : (T) Convert.ChangeType(value, typeof(T)); }