Tentativas de login cSharp
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.
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.
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
Curtidas 0
Melhor post
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.
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
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.
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
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
08/12/2016
Me ajudou bastante Lucas.
Obrigado.
Obrigado.
GOSTEI 0