Usuário com melhor resposta
ELSE não está funcionando

Pergunta
-
Oi pessoal,
Minha aplicação, para fazer o login de um usuário, verifica se o nome que ele digitou existe no banco de dados, se não, existe uma mensagem contida no ELSE que deveria ser apresentada informando que o usuário não foi encontrado.
Mas, embora entre no ELSE, o código lá dentro não é executado.
Já depurei mas não consegui descobrir o porquê. Podem me ajudar?
Segue a parte do código que não funciona:
else { Console.Clear(); Console.WriteLine("Sorry, the user name you entered could not be found in the database."); return user; }
Segue o código do método para login completo:
public static User SignIn(string userName) { User user = new User(); //Ask for user name Console.Clear(); string uName = userName; string uPass = string.Empty; object queryResult = null; // Open DB connection and check if user name exists using (SqlConnection con = new SqlConnection(DatabaseConnection.ConnectionString)) { //string pw = string.Empty; SqlCommand cmd = new SqlCommand("SELECT * FROM tblUser WHERE UserName = '" + uName + "'", con); con.Open(); queryResult = cmd.ExecuteScalar(); con.Close(); // If user name exists, get the password for that user from the database } if (queryResult != null) { user.Username = uName; Console.Clear(); using (SqlConnection con = new SqlConnection(DatabaseConnection.ConnectionString)) { SqlCommand cmd2 = new SqlCommand("SELECT UserPassword FROM tblUser WHERE UserName = '" + uName + "'", con); con.Open(); SqlDataReader reader = cmd2.ExecuteReader(); while (reader.Read()) { for (int i = 0; i < reader.FieldCount; i++) { uPass = (string)reader.GetValue(i); } } con.Close(); } Console.WriteLine("Enter password: "); string pW = ReadPassword(); if (pW == uPass) { user.Password = uPass; user.SignedIn = true; Console.Clear(); Console.WriteLine("You have successfully signed in!"); Thread.Sleep(1500); Console.Clear(); Console.WriteLine("Let's get started!"); Thread.Sleep(1000); } return user; } else if(queryResult == null) { Console.Clear(); Console.WriteLine("Sorry, the user name you entered could not be found in the database."); return user; } else { Console.Clear(); Console.WriteLine("Sorry, the user name you entered could not be found in the database."); return user; } }
Valeu
- Editado Dev Apprentice quarta-feira, 5 de outubro de 2016 18:30
Respostas
-
Oi William,
Inverti a lógica e removi o if adicional. Ainda não está funcionando.
Quando eu faço a depuração, vejo que o programa entra no if, ele pass linha por linha, mas nada é apresentado no console. Quando, porém, eu coloco um valor no queryResult que não seja null, tudo funciona normalmente.
if(queryResult == null) { //bloco de código } else { //bloco de código }
Voce tem certeza que nao esta exibindo no console, ou nao esta PERMANECENDO no console.
Voce tem um monte de Console.Clear() em varios lugares, tem certeza que nao esta passando por uma limpeza?
Sugiro colocar um ponto de parada logo apos o writeln, deste jeito:
Console.Clear(); Console.WriteLine("Sorry, the user name you entered could not be found in the database."); Console.ReadKey();//espera o usuario pressionar qualquer tecla return user;
att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Marcado como Resposta Dev Apprentice quarta-feira, 5 de outubro de 2016 20:00
Todas as Respostas
-
Se voce isolar somente os IFs voce vai ver porque:
if (queryResult != null) { //bloco de codigo } else if(queryResult == null) { //bloco de codigo } else { //bloco de codigo }
Note que no começo voce testa se queryResult é diferente de nulo, depois tem outro else if que testa se é igual a nulo.
Entao queryResult pode ter somente dois estados, igual a nulo ou diferente de nulo.. nao sobra nenhum outro estado para que ele entre no ultimo else.
Entendeu?
Att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Editado William John Adam TrindadeModerator quarta-feira, 5 de outubro de 2016 19:26
- Sugerido como Resposta Cliffinho quarta-feira, 5 de outubro de 2016 19:47
-
Olá,
A mensagem deve estar aparecendo no Console (Caso seja uma aplicação console application). Se você está fazendo uma aplicação desktop (Winforms) aí poderia substituir essa linha:
Console.WriteLine("Sorry, the user name you entered could not be found in the database.");
Por essa:
MessageBox.Show("Sorry, the user name you entered could not be found in the database.");
Valeu!Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!
André Secco
Microsoft MSP & MSDN Tech Advisor
Blog: http://andresecco.com.br
GitHub: http://github.com/andreluizsecco
Twitter: @andre_secco -
Só uma dica, quando se esta fazendo um Login, apresentamos as mensagens aos pedaços facilitando a quebra de segurança, se você apresenta mensagem que o usuário não existe, depois apresenta mensagens como senha só pode conter números ou coisa parecida esta na verdade auxiliando um usuário malicioso a quebrar sua segurança.
Quando for fazer um sistema de login :
Solicite os dados de Usuário e Senha, se não encontrar o usuário ou a senha for invalida de uma mensagem simples do tipo "Usuário e/ou Senha Inválido ou não Cadastrado"
Se a resposta contribuiu com seu aprendizado por favor marque como Útil
Se solucionou seu problema por favor marque como Resposta
Atenção, se seu problema foi resolvido não deixe o post aberto
Visite : www.codigoexpresso.com.br -
Oi William,
Inverti a lógica e removi o if adicional. Ainda não está funcionando.
Quando eu faço a depuração, vejo que o programa entra no if, ele pass linha por linha, mas nada é apresentado no console. Quando, porém, eu coloco um valor no queryResult que não seja null, tudo funciona normalmente.
if(queryResult == null) { //bloco de código } else { //bloco de código }
Obrigado, -
-
-
Oi William,
Inverti a lógica e removi o if adicional. Ainda não está funcionando.
Quando eu faço a depuração, vejo que o programa entra no if, ele pass linha por linha, mas nada é apresentado no console. Quando, porém, eu coloco um valor no queryResult que não seja null, tudo funciona normalmente.
if(queryResult == null) { //bloco de código } else { //bloco de código }
Voce tem certeza que nao esta exibindo no console, ou nao esta PERMANECENDO no console.
Voce tem um monte de Console.Clear() em varios lugares, tem certeza que nao esta passando por uma limpeza?
Sugiro colocar um ponto de parada logo apos o writeln, deste jeito:
Console.Clear(); Console.WriteLine("Sorry, the user name you entered could not be found in the database."); Console.ReadKey();//espera o usuario pressionar qualquer tecla return user;
att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Marcado como Resposta Dev Apprentice quarta-feira, 5 de outubro de 2016 20:00
-
Eu preciso falar urgentemete com voce.. entre en contato pelo Linkedin.
Grato
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
-