Cuando llama a SqlCommand.ExecuteReader() , el SqlDataReader que te da está posicionado inicialmente antes el primer registro. Debe llamar a SqlDataReader.Read() para pasar al primer registro antes de intentar acceder a cualquier dato. SqlDataReader.Read() devuelve true si pudo pasar al primer registro; devuelve false si no hay registros.
if (sqlDataReader.Read())
{
String roles = sqlDataReader[0].ToString();
return roles;
}
else
{
// The user name or password is incorrect; return something else or throw an exception.
}