When reading data from SqlDataReader you have to know your select statement’s columns order to read and map data from database to your model. Often it looks somehow like this:
using (SqlDataReader reader = command.ExecuteReader())
{
if (reader.Read())
return new AnimalModel
{
AnimalId = reader.GetInt32(0),//or better with enum like that: AnimalId = reader.GetInt32((int)AnimalSelect.AnimalId)
BirthDate = reader.GetDateTime(1),
Name = reader.GetString(2)
//etc...
};
else return null;
}
It’s a good practice to create enum representing select’s columns and using it instead of int indexes.
But wouldn’t it be better if you could just do it like that:
using (SqlDataReader reader = command.ExecuteReader())
{
if (reader.Read())
return reader.ReadObject();
else return null;
}