Tentativas de login cSharp
08/12/2016
0
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
Curtir tópico
+ 0
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.
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
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.
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
Clique aqui para fazer login e interagir na Comunidade :)