Decir que tengo esta clase:Cómo usar datareader con valores nulos
class myclass
{
public int Field1{ get; set; }
public int? Field2 { get; set; } //Note Field2 is nullable
}
Estoy intentando rellenar una lista genérica con los datos procedentes de una base de datos. Como GetSqlInt32 implementa INullable, hubiera pensado que el siguiente código funcionaría. No es así Genera un error si Field2 es nulo.
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
});
}
¿Alguna idea de por qué no funciona?
Gracias por esto, pero por qué no algo como esto sin necesidad de utilizar un método de extensión: Campo2 = (rdr.IsDBNull (Field2_Ordinal) (int) null:?? Rdr.GetSqlInt32 (Field2_Ordinal) .Value) – Anthony
@Anthony: Simplicidad, básicamente . ¿Qué versión crees que es más fácil de leer? :) (Sí, significa que tienes el método de extensión adicional, pero solo necesitas ese * una vez *, sin importar cuántos campos NULL incluye). –
También puedes crear un método de extensión en DataReader llamado GetNullableInt32 o algo así, por supuesto . –