Tentativas de login cSharp

08/12/2016

0

C#

Olá, estou com um problema que aparentemente seja fácil resolver.
Estou fazendo um form de login, porém quero que feche caso o usuário erre 3 vezes o login e senha.
Olhem como eu fiz.

public void logar()
        {
            sqlConn = new SqlConnection(strConn);

            string usuario, senha;

                try
                {
         
                        usuario = tbusuario.Text;
                        senha = tbsenha.Text;

                        _Sql = "SELECT COUNT(id_usuario) FROM usuario WHERE usuario = @usuario AND senha = @senha";

                        SqlCommand cmd = new SqlCommand(_Sql, sqlConn);

                        cmd.Parameters.Add("@usuario", SqlDbType.VarChar).Value = usuario;
                        cmd.Parameters.Add("@senha", SqlDbType.VarChar).Value = senha;

                        sqlConn.Open();

                        int verdade = (int)cmd.ExecuteScalar();

                        if (verdade > 0)
                        {
                            MessageBox.Show("Logado com Sucesso");
                    ok = true;
                        }
                        else
                        {
                            MessageBox.Show("Erro ao Logar");     
                        }
   
                }
                
            catch (SqlException errro)
            {
                MessageBox.Show(errro + "No Banco");
            }
        }


private void button1_Click(object sender, EventArgs e)
        {
            while(cont <= 3)
            {
                while (conti < 3)
                {
                    logar();
                    if (ok == true)
                    {
                        break;
                    }
                    else
                    {
                        cont++;
                        MessageBox.Show("Você possuí mais " + (3 - cont) + " tentativas");
                        if (cont == 4)
                        {
                            Environment.Exit(0);
                        }
                    }
                }
            }       
            frmPrincipal principal = new frmPrincipal();
            principal.Show();
            this.Close();
        }


Quando o usuário clicar em ok caso dê caso erre o login, eu queria que o usuário digitasse outro login e clicasse novamente em logar.
Porém como está o sistema roda direto as 3 tentativas com o mesmo login e senha.
Vitor Souza

Vitor Souza

Responder

Post mais votado

08/12/2016

Do jeito que está ele irá rodar as 3 tentativas ininterruptamente.

Não é necessário usar while(), é só transformar o Login em um método que retorna um valor bool, e caso seja true, prosseguir para o banco, caso false, aumentar o int de número de erros do clique do botão.

Esse é o método mais simples, o método mais complexo iria envolver blocos try-catch em ambos os métodos, além disso eu recomendo que você retire a dependência dos TextBox do método Login, pois se trata de uma lógica de negócio, e não é bom envolver controles de interface nisso.

Abraço.

Lucas Campos

Lucas Campos
Responder

Mais Posts

09/12/2016

Vitor Souza

Obrigado pela sua resposta Lucas, porém sou iniciante ainda.
Teria como me mostrar como ficaria o método login sem as dependências dos TextBox? E colocando o método login pra retornar o valor bool.

Obrigado.
Responder

09/12/2016

Lucas Campos

Não estou podendo testar um código agora, mas vou colocar um exemplo, vou mudar só as partes que são necessárias, de resto você pode usar seu código já existente

//Mudaria os parâmetros Logar, colocaria nome e usuário como parâmetro
//Mudaria o retorno de void para bool 
public void logar(string usuario, string senha)
      {
            //recebe os parâmetros do método, isso irá evitar a mistura de interface e o código de acesso à dados
            string _usuario = usuario;
            string _senha = senha;
                try
                {
                    //faz toda sua lógica do banco de dados, se ele conseguiu logar

                      return true;
                    //se não conseguiu
                      return false;
                }
                 
            catch (SqlException errro)
            {
                MessageBox.Show(errro + "No Banco");
            }
        }



 
//Como fazer a chamada, só um exemplo. 
public int erros = 0;
 
private void button1_Click()
        {
            string nome = tbusuario.txt;
            string senha = tbusuario.txt;


            if (erros < 3)
            {
                if (logar(nome, senha) == false)
                    erros++;
                else
                {
                   //logica caso a senha e usuario esteja correta
                }
            }
            else
            {
                //logica caso atingir o número permitido de erros
            }
        }
Responder

09/12/2016

Vitor Souza

Me ajudou bastante Lucas.

Obrigado.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar