none
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()? RRS feed

  • Pergunta

  • 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;
                }
            }
        }


    domingo, 18 de fevereiro de 2018 14:34

Todas as Respostas

  •  Dei uma reparada que no seu while a dataObtida é uma string e não uma lista.
      mesmo ela dentro do while somente vai está com um unico dado populado nela.
      nesse caso o certo é você ultilizar uma lista.

     private void cmb_nomeOfDia_SelectedIndexChanged(object sender, EventArgs e)
        {
            lst_resultado.Items.Clear();
            btn_visualizar.Visible = true;
            btn_visualizar.Enabled = true;
            List<String> dataObtida = new List<string>();//lista de string

                String nomeOfDia = "", ocorrenciaObtida = "", nomeOfDiaObtido = "": 
                
              
                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]);
                      //Alimento a lista de datas obtidas
                      dataObtida.add(Convert.ToString(dados[3]).Remove(10, 9));
                   }
                }
                if(nomeOfDiaObtido != nomeOfDia)
                {
                   MessageBox.Show("Este oficial não possui serviço registrado!");
                }
                else
                {
                   
                   // Aqui o foreach para popular o listbox
                   foreach (var data in dataObtida)
                   {
                      lst_resultado.Items.Add(data);
                   }

                   txt_ocorrencias.Text = ocorrenciaObtida;
                }
            }

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

        }

    Analista Programador

    segunda-feira, 26 de fevereiro de 2018 14:44