Ir para o conteúdo
Hashatjin

Dúvidas sobre Database, Datagridview e Querys.....

Mensagens Recomendadas

Hashatjin

Boas, preciso de ajuda urgente em algumas coisas sou novo cá ainda não entendo isto muito bem mas preciso de ajuda...
Eu ando a programar algumas coisas em C# com utilização de database e Windows Forms...

Eu gostaria de saber se alguém me pode recomendar alguns tutoriais sobre a utilização de querys para preencher uma datagridview usando informações variadas da database...

Do género na figura seguinte da tabela eu queria trocar os números das selecções e dos estádios por os seus nomes repetitivos nomes... Alguém me pode me ajudar com as querys necessárias para isso?  

gowQYd.png

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
apocsantos

Boa tarde,

Tuturial não conheço nenhum em particular. Existem alguns bons livros sobre C#. Na net encontras alguns engraçados e tens um bom artigo na revista PROGRAMAR C# CRUD (CREATE, READ, UPDATE & DELETE).

Deixo aqui mais um link para um outro livro disponível na net. ftp://soporte.uson.mx/publico/02_ING.SISTEMAS.DE.INFORMACION/PVI/Beginning C%23 5.0 databases(1).pdf.

Se só pretendes preencher uma gridview, cá fica um exemplo

 

MySql.Data.MySqlClient.MySqlConnection conn; string myConnectionString; myConnectionString = "server=127.0.0.1;uid=root;" + "pwd=12345;database=test;"; try { conn = new MySql.Data.MySqlClient.MySqlConnection(); conn.ConnectionString = myConnectionString; conn.Open(); } catch (MySql.Data.MySqlClient.MySqlException ex) { MessageBox.Show(ex.Message); }

private void DataGridDoMysql()
{
  MySql.Data.MySqlClient.MySqlConnection conn;
  string myConnectionString;

  myConnectionString = "server=127.0.0.1;uid=root;" + "pwd=12345;database=test;";

  try
  {
      conn = new MySql.Data.MySqlClient.MySqlConnection();
      conn.ConnectionString = myConnectionString;
      conn.Open();
  }
  catch (MySql.Data.MySqlClient.MySqlException ex)
  {
      MessageBox.Show(ex.Message);
  }
   MySqlDataAdapter MyDataAdapter = new MySqlDataAdapter();
          string sqlSelectAll = "SELECT * from minhaTabela";
          MyDA.SelectCommand = new MySqlCommand(sqlSelectAll, conn);
          DataTable table = new DataTable();
          MyDataAdapter.Fill(table);

          BindingSource bSource = new BindingSource();
          bSource.DataSource = table;
          dataGridView1.DataSource = bSource;
}

Cordiais cumprimentos,

Apocsantos

  • Voto 2

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

assinatura.jpg

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Hashatjin

Sim, entendo, obrigado pelos links... A ideia é apresentar a tabela que apresentei anteriormente só que em vez de aparecer nela a dizer o cod_estadio aparecer o nome do estádio vindo buscar essa informação a seguinte tabela... Problema já tentei todo tipo de querys... e nada...

Se escrever o codigo para alterar o nome da tabela também agradecia! 

fniPxl.png

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
apocsantos

Boa tarde,

Podes literalmente usar o mesmo código que usei anteriormente, apenas alteras a query.

private void DataGridDoMysql()
{
  MySql.Data.MySqlClient.MySqlConnection conn;
  string myConnectionString;

  myConnectionString = "server=127.0.0.1;uid=root;" + "pwd=12345;database=test;";

  try
  {
      conn = new MySql.Data.MySqlClient.MySqlConnection();
      conn.ConnectionString = myConnectionString;
      conn.Open();
  }
  catch (MySql.Data.MySqlClient.MySqlException ex)
  {
      MessageBox.Show(ex.Message);
  }
   MySqlDataAdapter MyDataAdapter = new MySqlDataAdapter();
          string sqlSelectAll = "SELECT euro2016.jogo.cod_estadio, euro2016.jogo.cod_tipo_jogo, euro2016.estadio.nome, euro2016.jogo.cod_selecao_1, euro2016.jogo.cod_selecao_2, euro2016.jogo.golos_selecao_1,  euro2016.jogo.golos_selecao_2 from euro2016.jogo left join euro2016.estadio on (euro2016.jogo.cod_estadio = euro2016.estadio.cod_estadio)";
          MyDA.SelectCommand = new MySqlCommand(sqlSelectAll, conn);
          DataTable table = new DataTable();
          MyDataAdapter.Fill(table);

          BindingSource bSource = new BindingSource();
          bSource.DataSource = table;
          dataGridView1.DataSource = bSource;
}

 

Cordiais cumprimentos,

Apocsantos

  • Voto 1

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

assinatura.jpg

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Hashatjin

Obrigado a query que disponibilizou ajudou bastante porem surgiu um problema... 

Onde aparece cod_selecão_2 ainda não consegui trocar pelos nomes das respectivas selecções...

Select euro2016.jogo.data as Data , euro2016.tipo_jogo.tipo_jogo as Fase , euro2016.estadio.nome as Estadio,
 euro2016.selecao.nome as Seleção_1,euro2016.jogo.golos_selecao_1 as Golos, euro2016.jogo.cod_selecao_2,  euro2016.jogo.golos_selecao_2
 as Golos from euro2016.jogo left join euro2016.estadio on (euro2016.jogo.cod_estadio = euro2016.estadio.cod_estadio)
 left join euro2016.tipo_jogo on (euro2016.jogo.cod_tipo_jogo = euro2016.tipo_jogo.cod_tipo_jogo) 
 left join euro2016.selecao on (euro2016.jogo.cod_selecao_1 = euro2016.selecao.cod_selecao)

KZvwQ3.png

 

 

Também possui outra coisa que gostava de aprender, como adicionar informação a tabela sendo que as combobox presentes dispõe do nome presente nas outras tabelas e não dos números da tabela euro2016.jogo... A data também da um erro de ordem pois eu não consigo mudar o formato por mais que mude para yyyy-mm-dd ele depois de executar o programa ele volta ao estado anterior dd-mm-yyyy 

tqjnbp.png

Aqui esta o código que eu estava a tentar fazer... A query muito provavelmente é o errado da coisa... Se não for tudo xD

 private void Add_Jogo_Click(object sender, EventArgs e)
        {
            MySqlConnection con = new MySqlConnection(@"server=localhost;user id=root;password=12345;database=euro2016");
            con.Open();
            if (selecao2.Text == selecao1.Text)
            {
                MessageBox.Show("Não pode colocar uma selação a jogar contra si mesma!");
            }
            else
            {
                string t = "insert into (euro2016.tipo_jogo.tipo_jogo, euro2016.estadio.nome, euro2016.selecao.nome,euro2016.jogo.golos_selecao_1, euro2016.jogo.golos_selecao_2 from euro2016.jogo left join euro2016.estadio on (euro2016.jogo.cod_estadio = euro2016.estadio.cod_estadio) left join euro2016.tipo_jogo on (euro2016.jogo.cod_tipo_jogo = euro2016.tipo_jogo.cod_tipo_jogo) left join euro2016.selecao on (euro2016.jogo.cod_selecao_1 = euro2016.selecao.cod_selecao)) values ('" + comboBox1.Text + "','" + comboBox2.Text + "','" + selecao1.Text + "','" + Gol1.Text + "','" + Gol2.Text + "');";
                MySqlCommand cmdDataBase = new MySqlCommand(t, con);
                cmdDataBase.ExecuteNonQuery();
                MySqlDataReader myreader;
                try
                {
                    myreader = cmdDataBase.ExecuteReader();
                    MessageBox.Show("Jogo Introduzido com Sucesso!");
                    while (myreader.Read())
                    {

                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                con.Close();

Obrigado pela atenção,

Hashatjin

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
apocsantos

Boa noite,

Estou mesmo a parar, depois de umas horas "em distraction free mode", a programar. No final de jantar, respondo-te à tua duvida!

A paciência e a perseverança, são boas características num programador!

Aproveita e deixa-me se fazes o favor, o nome das tabelas onde armazenas as selecções, para poder fazer a query adequada.

Cordiais cumprimentos,

Apocsantos


"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

assinatura.jpg

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
N3lson

Aqui tens um exemplo usando o DataReader e personalizando headers da grid bem com os valores a retornar

Este exemplo usa como baseDados o access mas no MySql é idêntico so tens de trocar o OLEBD.. por MySql...

Confere os comentários para veres a razão de eu usar este método, desculpa a query e campos serem estes mas peguei num projecto meu para te ajudar

// Listagem das aves
        public void aves(int id = 0, string sexo = "")
        {
            dataGridView1.DataSource = null;

            DataRow row = null;

            string query = "SELECT * FROM Aves ";

            if(sexo !="")
            {
                query += " WHERE sexo = ";

                switch (sexo)
                {
                  case "M":
                    query += "M";
                  break;
                  case "F":
                    query += "F";
                  break;
                }
            }

            if (id != 0)
            {
                query += " AND id = @id;";
            }
            
            DataTable dt = new DataTable();

            try
            {
                using (OleDbConnection con = new OleDbConnection(cfg.connectionString)) // Este constring é a string de ligar a base de dados
                {
                    using(OleDbCommand cmd = new OleDbCommand( query, con))
                    {
                        con.Open();

                        if (id != 0)
                        {
                            cmd.Prepare();
                            cmd.Parameters.AddWithValue("@id", id);
                        }

                        OleDbDataReader reader = cmd.ExecuteReader();

                        List<string> t = new List<string>() { "id", "Mutação", "Anilha", "Ano", "Sexo"};

                        DataColumn detalhes = new DataColumn("detalhes", typeof(Bitmap));

                        dt.Columns.Add(detalhes);

                        foreach (string h in t)
                        {
                            dt.Columns.Add(h);
                        }

                        while (reader.Read())
                        {
                            row = dt.NewRow();

                            Bitmap ver = new Bitmap(MS_ACESS.Properties.Resources.property); // Imagem para clicar

                            row[0] = ver;
                            row[1] = reader["id"];
                            row[2] = reader["mutacao"];
                            row[3] = reader["anilha"];
                            row[4] = reader["ano"];
                            row[5] = funcao.GetSexo(Convert.ToChar(reader["sexo"])); // usar funções personalizadas para apresentar texto no lugar de numeros que niguem sabe de que são e a que corresponde 

                            dt.Rows.Add(row);
                        }

                        dataGridView1.DataSource = dt;

                        this.dataGridView1.Columns["id"].Visible = false;   // Esconder id
                        this.dataGridView1.Columns["detalhes"].FillWeight = 15; // Limitar tamanho da header para o que pretenderes
                        this.dataGridView1.Columns["detalhes"].HeaderText = ""; // Esconder texto header (caso pretendas usar imagem) 

                    } 
                    con.Close();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return;
            }
        }

 

Editado por N3lson

You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Hashatjin
17 minutos atrás, apocsantos disse:

Boa noite,

Estou mesmo a parar, depois de umas horas "em distraction free mode", a programar. No final de jantar, respondo-te à tua duvida!

A paciência e a perseverança, são boas características num programador!

Aproveita e deixa-me se fazes o favor, o nome das tabelas onde armazenas as selecções, para poder fazer a query adequada.

Cordiais cumprimentos,

Apocsantos

O nome da tabela é selecao ... podes ver essa tabela na primeira imagem colocada na minha mensagem anterior...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
apocsantos

Boa noite,

Então cá vai, primeiro o código em C# para a app, e depois o SQL separado para veres como se faz. Porque eu já sei fazer, fazer mais uma vez, menos uma vez, não faz grande diferença, mas para quem está a aprender todas as tentativas, são um passo na "jornada de mil milhas".

private void DataGridDoMysql()
{
  MySql.Data.MySqlClient.MySqlConnection conn;
  string myConnectionString;

  myConnectionString = "server=127.0.0.1;uid=root;" + "pwd=12345;database=test;";

  try
  {
      conn = new MySql.Data.MySqlClient.MySqlConnection();
      conn.ConnectionString = myConnectionString;
      conn.Open();
  }
  catch (MySql.Data.MySqlClient.MySqlException ex)
  {
      MessageBox.Show(ex.Message);
  }
   MySqlDataAdapter MyDataAdapter = new MySqlDataAdapter();
          
  string sqlSelectAll = "Select euro2016.jogo.data as Data , euro2016.tipo_jogo.tipo_jogo as Fase , euro2016.estadio.nome as Estadio ,    euro2016.selecao.nome as Seleção_1, euro2016.jogo.golos_selecao_1 as Golos_1, euro2016.selecao.nome as Seleção_1 as selecao_2, euro2016.jogo.golos_selecao_2  as Golos_2 from euro2016.jogo left join euro2016.estadio on (euro2016.jogo.cod_estadio =  euro2016.estadio.cod_estadio) left join euro2016.tipo_jogo on (euro2016.jogo.cod_tipo_jogo = euro2016.tipo_jogo.cod_tipo_jogo)  left join euro2016.selecao on (euro2016.jogo.cod_selecao_1 = euro2016.selecao.cod_selecao)";
          
          MyDA.SelectCommand = new MySqlCommand(sqlSelectAll, conn);
          DataTable table = new DataTable();
          MyDataAdapter.Fill(table);

          BindingSource bSource = new BindingSource();
          bSource.DataSource = table;
          dataGridView1.DataSource = bSource;

  //altera aos cabeçalhos da dataGrid
  //como na tropa e na programação o zero também é numero
  dataGridView1.Columns[3].HeaderText = "1ª Selecção";
  dataGridView1.Columns[5].HeaderText = "2ª Selecção";
  
  //altera a formatação da data na datagrid:
  dataGrid.Columns[0].DefaultCellStyle.Format = "MM/dd/yyyy HH:MM:ss";

}

 

Update usando bindingDataSource:

private void ActualizarButton_Click(object sender, System.EventArgs e)
    {
        // Actualiza a base de dados com a informação que o utilizador colocou na datagridview
        dataAdapter.Update((DataTable)bSource.DataSource);
    }

 

SQL

Select 
  euro2016.jogo.data as Data , 
  euro2016.tipo_jogo.tipo_jogo as Fase , 
  euro2016.estadio.nome as Estadio ,
  euro2016.selecao.nome as Seleção_1, 
  euro2016.jogo.golos_selecao_1 as Golos_1,
  euro2016.selecao.nome as Seleção_1 as selecao_2,
  euro2016.jogo.golos_selecao_2  as Golos_2
  from euro2016.jogo 
  left join euro2016.estadio on (euro2016.jogo.cod_estadio = euro2016.estadio.cod_estadio) 
  left join euro2016.tipo_jogo on (euro2016.jogo.cod_tipo_jogo = euro2016.tipo_jogo.cod_tipo_jogo) 
  left join euro2016.selecao on (euro2016.jogo.cod_selecao_1 = euro2016.selecao.cod_selecao)

Adicionar informação como estas a usar bindingdatasource, tens tudo facilitado, caso contrario acabarias tendo de escrever um insert ou um update conforme fosse o caso.

E antes que me esqueça a questão dos códigos de selecção, foi de certeza distracção! Olha bem para o meu SQL e para o teu! Repara no nome dos campos! :D

Cordiais cumprimentos,

Apocsantos


"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

assinatura.jpg

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.