none
Erro ao excluir registro do banco de dados RRS feed

  • Pergunta

  • E ai pessoal, como sempre estou vindo aqui como ultima opção para solucionar meus problemas.

    Nesse é o seguinte, não consigo excluir um registro quando clico no botão, a condição para exclusão eu pego da linha selecionada no DataGridView. Segue o código do botão que realiza a exclusão:

    private void btnExcluir_Click(object sender, EventArgs e)
            {
                if (dataGridFuncionarios.RowCount != 0)
                {
                    String userExcluir = dataGridFuncionarios.CurrentRow.Cells[0].Value.ToString();
                    String comando = "DELETE FROM funcionario WHERE login = " + userExcluir + ";";
                    DialogResult opcaoSelecionada;
                    opcaoSelecionada = MessageBox.Show("Deseja deletar o usuário: " + userExcluir + " ?", 
                        "Encerrar", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    
                    if (opcaoSelecionada.Equals(DialogResult.Yes))
                    {
                        if (banco.excluirRegistro(comando) == true)
                        {
                            MessageBox.Show("Usuário deletado.", "Excluir Funcionário",
                                MessageBoxButtons.OK, MessageBoxIcon.Information);
                            atualizarFuncionarios();
                        }
                        else
                        {
                            MessageBox.Show("Erro ao deletar.", "ERRO",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
                            
                        }
                    }
                }
            }//

    Agora segue o método excluirRegistros() da Classe BancoDedados

    public bool excluirRegistro(String strComando)
            {
                SqlCommand comando = new SqlCommand();
                conexao = new SqlConnection(cs);
                conexao.Open();
    
                comando.Connection = conexao;
                comando.CommandText = strComando;
                try
                {
                    comando.ExecuteNonQuery();
                    return true;
                }
                catch
                {
                    return false;
                }
            }//

    Sempre que tento deletar cai no else dizendo "Erro ao deletar", fiz um break point na linha do comando.ExecuteNonQuery() e essa diz que não existe condição, queria entender o pq disso e se alguém tiver alguma solução irá ajudar muito. 

    Obs: Programo em VisualStudio2010 e a aplicação é WinForms.

    quarta-feira, 25 de setembro de 2013 19:46

Respostas

  • Obrigado Ricardo, viajando pra faculdade pensei muito e encontrei o erro

    Na minha string comando esqueci de colocar a variavel  userExcluir entre aspas, pois esta é uma string

    Ficaria assim

    String comando = "DELETE FROM funcionario WHERE login = '" + userExcluir + "';";

    • Sugerido como Resposta Evandro Marques quarta-feira, 25 de setembro de 2013 22:43
    • Marcado como Resposta Evandro R Marques quarta-feira, 25 de setembro de 2013 23:06
    quarta-feira, 25 de setembro de 2013 22:40

Todas as Respostas

  • Evandro,

    Segue um exemplo de como você deve fazer utilizando uma string contendo seu comando SQL:

    protected void cmdDelete_Click(object sender, EventArgs e)
        {
            string deleteSQL;
            deleteSQL = "DELETE FROM Authors ";
            deleteSQL += "WHERE au_id=@au_id";

            SqlConnection con = new SqlConnection(connectionString);
            SqlCommand cmd = new SqlCommand(deleteSQL, con);
            cmd.Parameters.AddWithValue("@au_id ", lstAuthor.SelectedItem.Value);

            int deleted = 0;
            try
            {
                con.Open();
                deleted = cmd.ExecuteNonQuery();
                lblResults.Text = "Record deleted.";
            }
            catch (Exception err)
            {
                lblResults.Text = "Error deleting author. ";
                lblResults.Text += err.Message;
            }
            finally
            {
                con.Close();
            }
            if (deleted > 0)
            {
                FillAuthorList();
            }
        }


    Ricardo Minoru Makiyama



    quarta-feira, 25 de setembro de 2013 20:31
  • Obrigado Ricardo, viajando pra faculdade pensei muito e encontrei o erro

    Na minha string comando esqueci de colocar a variavel  userExcluir entre aspas, pois esta é uma string

    Ficaria assim

    String comando = "DELETE FROM funcionario WHERE login = '" + userExcluir + "';";

    • Sugerido como Resposta Evandro Marques quarta-feira, 25 de setembro de 2013 22:43
    • Marcado como Resposta Evandro R Marques quarta-feira, 25 de setembro de 2013 23:06
    quarta-feira, 25 de setembro de 2013 22:40
  • Evandro,

    Sua solução é válida, mas recomendo a utilização de parâmetros para evitar vulnerabilidades como o SQL Injection.


    Ricardo Minoru Makiyama


    • Editado RMinoru quinta-feira, 26 de setembro de 2013 00:30
    quinta-feira, 26 de setembro de 2013 00:28