Tentativas de login cSharp

C#

08/12/2016

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

Curtidas 0

Melhor post

Lucas Campos

Lucas Campos

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.
GOSTEI 1

Mais Respostas

Vitor Souza

Vitor Souza

08/12/2016

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.
GOSTEI 0
Lucas Campos

Lucas Campos

08/12/2016

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
            }
        }
GOSTEI 0
Vitor Souza

Vitor Souza

08/12/2016

Me ajudou bastante Lucas.

Obrigado.
GOSTEI 0
POSTAR