none
O update está atualizando todos os cadastros com o mesmo nome c# - mysql RRS feed

  • Pergunta

  • Boa noite,

    Caros amigos, estou com problema de novo ao fazer a alteração com o update. Ele está chamando os dados normalmente, só que quando eu modifico um nome no cadastro e salvo, ele está alterando todos os campos de cadastros com o mesmo nome. Por favor me ajudem, já procurei o erro, mas não estou conseguindo achar.

    meu código está assim:

    //Botão de altualizar
     private void Alterardadosempresa_Click(object sender, EventArgs e)
            {
                int indice = dataGridView1.CurrentRow.Index;
                string temporaria = dataGridView1[0, indice].Value.ToString();
    
                Contato fcc = new Contato(temporaria);
                fcc.ShowDialog();
            }
    
    //metodo que faz a alteração
     public Contato(string Cd)
            {
                InitializeComponent();
    
                MySqlConnection conexao = new MySqlConnection();
                conexao = new MySqlConnection("SERVER=localhost;DATABASE=teste;UID=root;PASSWORD=;");
    
                string sql = "SELECT Cd_Contato,Nome,cpf,Email,cod_empresa,Celular FROM contatos where Cd_Contato ='" + Cd + "'";
    
    
    
                DataTable dtt = new DataTable();
    
                try
                {
    
                    conexao.Open();
                    if (conexao.State == ConnectionState.Open)
                    {
                        objAdapter = new MySqlDataAdapter(sql, conexao);
                        objAdapter.Fill(dtt);
    
                        textBox7.Text = dtt.Rows[0]["Cd_Contato"].ToString();
                        textBox1.Text = dtt.Rows[0]["Nome"].ToString();
                        textBox2.Text = dtt.Rows[0]["cpf"].ToString();
                        textBox4.Text = dtt.Rows[0]["Email"].ToString();
                        textBox5.Text = dtt.Rows[0]["cod_empresa"].ToString();
                        textBox3.Text = dtt.Rows[0]["Celular"].ToString();
    
    
                        this.Text = "Alteração de dados";
    
                        button1.Visible = false;
                        button2.Visible = true;
    
    
    
                    }
                    else
                    {
                        MessageBox.Show("Falha na  abertura da conexão", "Erro");
                    }
                }
                catch
                {
                    MessageBox.Show("Falha na leitura dos dados no banco", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                finally
                {
                    conexao.Close();
                }
            }
    
    //classe que faz o update
       class atualizar_contato
        {
    
    
            private MySqlConnection conexao;
    
            public void cadastro(cadas_contato cadast)
            {
                string caminho = "SERVER=localhost;DATABASE=Agenda;UID=root;PASSWORD=;";
    
                try
                {
    
                    conexao = new MySqlConnection(caminho);
                    conexao.Open();
    
                   
    
                    string inserir = "UPDATE contatos SET Nome='" + cadast.Nome_c + "',cpf='" + cadast.cpf + "',Email='" + cadast.email + "',cod_empresa='" + cadast.ncod_empresa + "',Celular='" + cadast.celular_c + "'";
    
    
                    MySqlCommand comandos = new MySqlCommand(inserir, conexao);
    
                    comandos.ExecuteNonQuery();
                    MessageBox.Show("Contato Atualizado com Sucesso!");
                    conexao.Close();
    
                }
    
                catch (Exception ex)
                {
    
                    throw new Exception("Erro de comandos" + ex.Message);
                }
            }
        }
    
    

    Alguém pode me ajudar?


    • Editado Andressa.s quarta-feira, 7 de dezembro de 2016 23:33
    quarta-feira, 7 de dezembro de 2016 23:32

Respostas

  • Olá Andressa,

    Você está esquecendo da Cláusula WHERE no seu comando UPDATE.

    Essa instrução está errada:

    string inserir = "UPDATE contatos SET Nome='" + cadast.Nome_c + "',cpf='" + cadast.cpf + "',Email='" + cadast.email + "',cod_empresa='" + cadast.ncod_empresa + "',Celular='" + cadast.celular_c + "'";

    Deixando sem uma condição (WHERE) ele atualizará tudo que estiver na tabela. Geralmente a condição é um ID da tabela.

    Pelo que analisei deve ser o campo Cd_contato que deve ir como condição. Ficaria mais ou menos assim:

    string inserir = "UPDATE contatos SET Nome='" + cadast.Nome_c + "',cpf='" + cadast.cpf + "',Email='" + cadast.email + "',cod_empresa='" + cadast.ncod_empresa + "',Celular='" + cadast.celular_c + "' WHERE Cd_contato = " + cadast.cd_contato;

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    • Marcado como Resposta Andressa.s quinta-feira, 8 de dezembro de 2016 16:33
    quinta-feira, 8 de dezembro de 2016 02:28
  • No evento do button2 (button2_Click) onde você cria o objeto cadas_contato você esquece de preencher a propriedade cd_contato e por isso ele fica com o valor padrão que é 0.

    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    • Marcado como Resposta Andressa.s sexta-feira, 9 de dezembro de 2016 22:34
    sexta-feira, 9 de dezembro de 2016 22:07

Todas as Respostas

  • Olá Andressa,

    Você está esquecendo da Cláusula WHERE no seu comando UPDATE.

    Essa instrução está errada:

    string inserir = "UPDATE contatos SET Nome='" + cadast.Nome_c + "',cpf='" + cadast.cpf + "',Email='" + cadast.email + "',cod_empresa='" + cadast.ncod_empresa + "',Celular='" + cadast.celular_c + "'";

    Deixando sem uma condição (WHERE) ele atualizará tudo que estiver na tabela. Geralmente a condição é um ID da tabela.

    Pelo que analisei deve ser o campo Cd_contato que deve ir como condição. Ficaria mais ou menos assim:

    string inserir = "UPDATE contatos SET Nome='" + cadast.Nome_c + "',cpf='" + cadast.cpf + "',Email='" + cadast.email + "',cod_empresa='" + cadast.ncod_empresa + "',Celular='" + cadast.celular_c + "' WHERE Cd_contato = " + cadast.cd_contato;

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    • Marcado como Resposta Andressa.s quinta-feira, 8 de dezembro de 2016 16:33
    quinta-feira, 8 de dezembro de 2016 02:28
  • Hey boa noite moço;

    eu modifiquei do modo que mostrou, mas também não funcionou... :(

    quinta-feira, 8 de dezembro de 2016 02:52
  • Tenta zerar a base (se for uma de teste), inserir novos itens e testar com esse código novo. Aparentemente não tem nada de errado a mais aí. Verifique se o campo cd_contato é sua chave primária.

    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    quinta-feira, 8 de dezembro de 2016 03:52
  • Andressa.s, o problema reside apenas na falta da clásula "WHERE" para condicionar a alteração do registro. Você pode condicionar ao índice (preferencialmente) ou então a outro(s) campo(s) da tabela que satisfaça a condição que possibilite a alteração.


    quinta-feira, 8 de dezembro de 2016 14:03
  • Boa tarde;

    então já zerei a tabela com truncate, o Cd_Contato realmente está como chave primaria...e não sei o que acontece..

    vou tentar criar tudo de novo, porque realmente ta estranho, não conseguir achar o erro de forma alguma...

    Mas mesmo assim muito obrigada! a todos...hehe

    Vou aproveitar esse topico pra perguntar aqui...vcs sabem como coloco uma mensagem de erro nesse botão atualizar, caso nenhuma linha for selecionada:

    //botão atualizar
    private void Alterardadosempresa_Click(object sender, EventArgs e)
            {
                int indice = dataGridView1.CurrentRow.Index;
                string temporaria = dataGridView1[0, indice].Value.ToString();
    
                Contato fcc = new Contato(temporaria);
                fcc.ShowDialog();
            }

    por que toda vez que clica nesse botão vazio ele da erro..gostaria que aparecesse uma mensagem..se alguém puder me ajudar, agradeço.



    • Editado Andressa.s quinta-feira, 8 de dezembro de 2016 16:36
    quinta-feira, 8 de dezembro de 2016 16:32
  • Andressa, tire um print da estrutura da tabela, ou coloque aqui o script de criação da mesma.

    Agora, não entendi uma coisa na sua dúvida. Ele alterou todas as colunas de um mesmo registro para um mesmo nome (você disse: "ele está alterando todos os campos de cadastros com o mesmo nome")? Ou ele alterou todas as linhas/registros com um mesmo nome?


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    quinta-feira, 8 de dezembro de 2016 16:36
  •  Quando eu clico em atualizar, ele modifica todos os registros com o mesmo nome, cpf e tudo...dai coloquei a o where que estava faltando..ele não modifica mais nenhum registro. Construi tudo do zero, e continua do mesmo jeito..ele salva sem dar erro, mas não alterar mais nenhum nome.

    O banco de dados está assim:


    • Editado Andressa.s quinta-feira, 8 de dezembro de 2016 21:06
    quinta-feira, 8 de dezembro de 2016 21:04
  • Andressa, 

    Após passar pela linha que você define o SQL na variável inserir, verifique como ficou o SQL (use o Quickwatch do Visual Studio ou um Message Box).

    Acredito que a variável/propriedade que armazena o código do contato possa estar sem valor ou com valor incorreto.


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    quinta-feira, 8 de dezembro de 2016 23:07
  • Boa tarde,

    coloquei a string inserir em um messageBox e não está alterando porque em Cd_Contato ele esta lendo todos como zero, por isso não está alterando nenhuma linha...Como eu resolvo isso.

     a imagem do messagebox:

    sexta-feira, 9 de dezembro de 2016 19:18
  • Poste o seu código onde você chama esse UPDATE. Precisamos ver como você passa esses valores para essa classe que realiza a atualização.

    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    sexta-feira, 9 de dezembro de 2016 19:39
  • Boa Noite,

    //Botão que salva a atualização
    
    private void button2_Click(object sender, EventArgs e)
            {
                cadas_contato cadas = new cadas_contato();
                atualizar_contato at = new atualizar_contato();
    
                cadas.Nome_c = textBox1.Text;
                cadas.cpf = textBox2.Text;
                cadas.email = textBox4.Text;
                cadas.celular_c = textBox3.Text;
                cadas.cd_empresa =Convert.ToInt32(textBox5.Text);
    
                at.cadastro(cadas);
    
                textBox1.Text = "";
                textBox2.Text = "";
                textBox3.Text = "";
                textBox4.Text = "";
                textBox5.Text = "";
    
                Close();
            }

    Classe que puxa os valores do banco:

    namespace Agenda
    {
        class cadas_contato
        {
    
            private int nCd_contato;
            private string nNome;
            private string ncpf;
            private string nemail;
            private int ncd_empresa;
            private string ncelular;
    
            public int Cd_Contato
            {
                get { return nCd_contato; }
                set { nCd_contato = value; }
            }
            public string Nome_c
            {
                get { return nNome; }
                set { nNome = value; }
            }
            public string cpf
            {
                get { return ncpf; }
                set { ncpf = value; }
            }
            public string email
            {
                get { return nemail; }
                set { nemail = value; }
            }
            public int cd_empresa
            {
                get { return ncd_empresa; }
                set { ncd_empresa = value; }
            }
    
            public string celular_c
            {
                get { return ncelular; }
                set { ncelular = value; }
            }
    
    
    
    
    
    
    
    
        }
    }

    Classe que faz o update:

     class atualizar_contato
        {
    
            private MySqlConnection conexao;
    
            public void cadastro(cadas_contato cadast)
            {
                string caminho = "SERVER=localhost;DATABASE=teste;UID=root;PASSWORD=;";
    
                try
                {
    
                    conexao = new MySqlConnection(caminho);
                    conexao.Open();
    
    
                                                     
                    string inserir = "UPDATE contatos SET Nome='" + cadast.Nome_c + "',cpf='" + cadast.cpf + "',Email='" + cadast.email + "',cd_empresa='" + cadast.cd_empresa + "',Celular='" + cadast.celular_c + "'WHERE Cd_Contato='" + cadast.Cd_Contato + "'";
    
    
                    MySqlCommand comandos = new MySqlCommand(inserir, conexao);
    
                    comandos.ExecuteNonQuery();
                    MessageBox.Show(inserir);
                    MessageBox.Show("Contato Atualizado com Sucesso!");
                    conexao.Close();
    
                }
    
                catch (Exception ex)
                {
    
                    throw new Exception("Erro de comandos" + ex.Message);
                }
            }
        }
    }

    //Metodo que ta fazendo o update

            public Contato(string Cd_Contato)
            {
                InitializeComponent();
                conexao = new MySqlConnection("SERVER=localhost;DATABASE=teste;UID=root;PASSWORD=;");
    
                string sql = "SELECT Cd_Contato,Nome,cpf,Email,cd_empresa,Celular FROM contatos where Cd_Contato='" + Cd_Contato + "'";
    
                DataTable dttpaci = new DataTable();
    
                try
                {
    
                    conexao.Open();
                    if (conexao.State == ConnectionState.Open)
                    {
                        objAdapter = new MySqlDataAdapter(sql, conexao);
                        objAdapter.Fill(dttpaci);
    
                       
                        textBox1.Text = dttpaci.Rows[0]["Nome"].ToString();
                        textBox2.Text = dttpaci.Rows[0]["cpf"].ToString();
                        textBox4.Text = dttpaci.Rows[0]["Email"].ToString();
                        textBox5.Text = dttpaci.Rows[0]["cd_empresa"].ToString();
                        textBox3.Text = dttpaci.Rows[0]["Celular"].ToString();
    
    
                        this.Text = "Alteração de dados";
    
                        button1.Visible = false;
                        button2.Visible = true;
    
    
    
                    }
                    else
                    {
                        MessageBox.Show("Falha na  abertura da conexão", "Erro");
                    }
                }
                catch
                {
                    MessageBox.Show("Falha na leitura dos dados no banco", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                finally
                {
                    conexao.Close();
                }
    
            }

    Já olhei todos..não consigo achar o por que deste erro! socorroo


    • Editado Andressa.s sexta-feira, 9 de dezembro de 2016 21:44
    sexta-feira, 9 de dezembro de 2016 21:37
  • No evento do button2 (button2_Click) onde você cria o objeto cadas_contato você esquece de preencher a propriedade cd_contato e por isso ele fica com o valor padrão que é 0.

    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    • Marcado como Resposta Andressa.s sexta-feira, 9 de dezembro de 2016 22:34
    sexta-feira, 9 de dezembro de 2016 22:07
  • Nossaaa era isso mesmo man..to com vontade de chorar!

    mto obrigada!  salvou minha vida!

    sexta-feira, 9 de dezembro de 2016 22:34
  • Que bom que ajudou. Valeu!

    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    sexta-feira, 9 de dezembro de 2016 23:18