Como faço para selecionar (select) no banco de dados mais de um valor (quando repetido) de um atributo, em MySQL utilizando o método Read()?

O código que desenvolvi só busca no banco a última linha da tabela do banco (tb_livro2018), gostaria de fazer uma busca por nome (combobox) e jogar o resultado (as datas que contém o nome selecionado) em uma listbox, incluindo os resultados com o mesmo nome/data. Por exemplo, se eu selecionar na combobox o nome 1º Ten Almeida, quero que todas as vezes que for encontrado no banco o nome 1º Ten Almeida, vá para a listbox as datas que este nome usou o livro. O problema é que só está pegando os dados (nome ou data) apenas uma vez. Do modo que vou mostrar em seguida, só está puxando apenas uma informação salva no banco:

//PRECISO QUE EU ESCOLHA O NOME E APAREÇA NA LISTBOX TODAS AS DATAS EM QUE ESTA PESSOA USOU O LIVRO

namespace Livro_de_Partes
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}

OperacaoBanco operacao = new OperacaoBanco();
MySqlDataReader dados;

private void Form2_Load(object sender, EventArgs e)
{
//INSERINDO DADOS NOS COMBOBOX
addOfDia();

}

//MÉTODOS
public void addOfDia()
{
    cmb_nomeOfDia.Items.AddRange(new object[] {
                "1º Ten Almeida",
                "1º Ten Coimbra",
                "1º Ten Braga",
                });
}

private void cmb_nomeOfDia_SelectedIndexChanged(object sender, EventArgs e)
{
lst_resultado.Items.Clear();
btn_visualizar.Visible = true;
btn_visualizar.Enabled = true;

        String nomeOfDia = "", ocorrenciaObtida = "", nomeOfDiaObtido = "", dataObtida = "";

        nomeOfDia = cmb_nomeOfDia.SelectedItem.ToString();

    try
    {
        dados = operacao.Select("SELECT cd_livro, nm_ofdia, ds_ocorrencia, dt_servico FROM tb_livro2018 WHERE nm_ofdia = '"+ nomeOfDia +"' ");

        if (dados.HasRows)
        {
           while (dados.Read())
           {
              nomeOfDiaObtido = Convert.ToString(dados[1]);
              ocorrenciaObtida = Convert.ToString(dados[2]);
              dataObtida = Convert.ToString(dados[3]).Remove(10, 9);
           }
        }
        if(nomeOfDiaObtido != nomeOfDia)
        {
           MessageBox.Show("Este oficial não possui serviço registrado!");
        }
        else
        {
           lst_resultado.Items.Add(dataObtida);
           txt_ocorrencias.Text = ocorrenciaObtida;
        }
    }

    catch (Exception erro)
    {
        MessageBox.Show("Erro: " + erro);
    }
    finally
    {
        Connection.fecharConexao();
    }

}

///////////////////////////////////////////////////CLASSE OPERACAOBANCO////////////////////////////

class OperacaoBanco
{
private MySqlCommand TemplateMethod(String query)
{
MySqlConnection Conexao = Connection.getConexao();
MySqlCommand Comando = new MySqlCommand(query, Conexao);

        try
        {
            Comando.ExecuteNonQuery();
            return Comando;
        }
        catch
        {
            return Comando;
        }
    }

    public MySqlDataReader Select(String query)
    {
        MySqlDataReader dadosObtidos = TemplateMethod(query).ExecuteReader();
        return dadosObtidos;
    }

    public Boolean Insert(String query)
    {
        MySqlConnection Conexao = Connection.getConexao();
        MySqlCommand Comando = new MySqlCommand(query, Conexao);

        try
        {
            Comando.ExecuteNonQuery();
            return true;
        }
        catch
        {
            return false;
        }
    }

    public Boolean Update(String query)
    {
        MySqlConnection Conexao = Connection.getConexao();
        MySqlCommand Comando = new MySqlCommand(query, Conexao);

        try
        {
            Comando.ExecuteNonQuery();
            return true;
        }
        catch
        {
            return false;
        }
    }
    public Boolean Delete(String query)
    {
        MySqlConnection Conexao = Connection.getConexao();
        MySqlCommand Comando = new MySqlCommand(query, Conexao);

        try
        {
            Comando.ExecuteNonQuery();
            return true;
        }
        catch
        {
            return false;
        }
    }
}

Nao ta muito claro sua duvida, mas sua lógica pra adicionar na lista nao deveria estar dentro do loop while (dados.Read())?

Era exatamente isso… deixei de prestar a atenção para as coisas mais simples.
Obrigado

1 curtida