none
ELSE não está funcionando RRS feed

  • 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


    quarta-feira, 5 de outubro de 2016 18:25

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
    quarta-feira, 5 de outubro de 2016 19:58
    Moderador

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
    ----------------------------------------------------------



    quarta-feira, 5 de outubro de 2016 19:25
    Moderador
  • 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

    quarta-feira, 5 de outubro de 2016 19:26
  • 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

    quarta-feira, 5 de outubro de 2016 19:38
  • 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,

    quarta-feira, 5 de outubro de 2016 19:53
  • Legal,

    Entendi, vou tentar usar. Muito obrigado.

    quarta-feira, 5 de outubro de 2016 19:55
  • É console, e só essa parte não é apresentada na tela. Obrigado.

    quarta-feira, 5 de outubro de 2016 19:56
  • 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
    quarta-feira, 5 de outubro de 2016 19:58
    Moderador
  • Eu preciso falar urgentemete com voce.. entre en contato pelo Linkedin.

    Grato


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    quarta-feira, 5 de outubro de 2016 19:58
    Moderador
  • Era exatamente isso, William.

    Muito obrigado!

    quarta-feira, 5 de outubro de 2016 20:01