Dire que j'ai cette classe:Comment utiliser datareader avec des valeurs nulles
class myclass
{
public int Field1{ get; set; }
public int? Field2 { get; set; } //Note Field2 is nullable
}
Je suis en train de remplir une liste générique avec des données provenant d'une base de données. Comme GetSqlInt32 implémente INullable, j'aurais pensé que le code ci-dessous fonctionnerait. Ce n'est pas le cas. Il génère une erreur si Field2 est null.
List<myclass> mylist=new List<myclass>();
int Field1_Ordinal = rdr.GetOrdinal("Field1");
int Field2_Ordinal = rdr.GetOrdinal("Field2");
SqlDataReader rdr = cmd.ExecuteReader(); //Execute a stored procedure to retrieve data from the database
while (rdr.Read())
{
mylist.Add(new myclass
{
Field1 = rdr.GetSqlInt32(Field1_Ordinal).Value,
Field2 = rdr.GetSqlInt32(Field2_Ordinal).Value //Error if field2 is null
});
}
Des idées pour lesquelles cela ne fonctionne pas?
Merci pour cela, mais pourquoi pas quelque chose comme ça sans utiliser une méthode d'extension: Champ2 = (rdr.IsDBNull (Field2_Ordinal)? (Int?) NULL: rdr.GetSqlInt32 (Field2_Ordinal) .Value) – Anthony
@Anthony: Simplicité, fondamentalement . Quelle version pensez-vous est plus facile à lire? :) (Oui, cela signifie avoir la méthode d'extension supplémentaire, mais vous n'avez besoin que de * une fois *, mais de nombreux champs int nullables.) –
Vous pouvez également créer une méthode d'extension sur DataReader appelée GetNullableInt32 ou quelque chose comme ça, bien sûr . –