c # IDataReader SqlDataReader diferencia

¿Alguien puede decirme la diferencia entre estas dos piezas de código? ¿Por qué usar IDataReader?

using (IDataReader reader = cmd.ExecuteReader())
{
    while (reader.Read())
    {
        // get data from the reader
    }
}

using (SqlDataReader reader = cmd.ExecuteReader())
{
    while (reader.Read())
    {
        // get data from the reader
    }
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta