Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 1
            [id] => 490141
            [titulo] => Login que indique individualmente se Usuário inválido ou senha Inválida
            [dataCadastro] => DateTime Object
                (
                    [date] => 2014-08-26 07:43:40
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 372930
            [status] => A
            [isExample] => 
            [NomeUsuario] => Kelvin Ott
            [Apelido] => Kelvin Ott
            [Foto] => 372930_20140603142428.jpeg
            [Conteudo] => Faça o select filtrando pelo login do funcionário e retornando a senha, se o select não retornar ninguém o login está errado. Se retornar porém a senha retornada não bate com a senha digitada a senha está errada.

[code]SELECT F.Senha FROM Funcionario F " + " INNER JOIN Perfil P ON F.Perfil = P.IDPerfil Where F.Login = @LOGIN AND F.Situacao = true[/code] ) )

Login que indique individualmente se Usuário inválido ou senha Inválida

Jair Souza
   - 25 ago 2014

Bem pessoal o título já diz o objetivo não alcançado até agora, tenho este código para um login em windows form C#, mas quando digitado algo inválido não acontece nada, mas deveria dizer "Login inválido" se for o login que não está cadastrado e dizer "Senha inválida" se for a senha que não está cadastrada.
O que está faltando ou o que tem de mais ?
Acho que o problema está no SELECT e nos if, mas não sei o que fazer...
Agradeço toda ajuda...
#Código

private void BtnEntrar_Click(object sender, EventArgs e)
        {
            try
            {
                OleDbConnection conexao = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Application.StartupPath + "\BDBiblioteca.mdb;Jet OLEDB:Database Password = 123");

                OleDbCommand comando = new OleDbCommand("SELECT * FROM Funcionario F " + " INNER JOIN Perfil P ON F.Perfil = P.IDPerfil Where F.Login = @Login And F.Senha = @Senha AND F.Situacao = true", conexao);

                comando.Parameters.AddWithValue("@Login ", loginTextBox.Text);
                comando.Parameters.AddWithValue("@Senha", senhaTextBox.Text);

                conexao.Open();

                OleDbDataReader reader = null;

                reader = comando.ExecuteReader(CommandBehavior.CloseConnection);

                if ((reader.HasRows) && (reader.Read()))
                {
                    if (loginTextBox.Text != reader["login"].ToString()) 
                    {
                        MessageBox.Show("Usuário Inválido !", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        loginTextBox.Clear();
                        loginTextBox.Focus();
                    }
                    else if (senhaTextBox.Text != reader["senha"].ToString())
                    {
                        MessageBox.Show("Senha Inválida !", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        senhaTextBox.Clear();
                        senhaTextBox.Focus();
                    }
                    else
                    {
                        usuarioConectado = loginTextBox.Text;
                        NivelAcesso = (reader["Descricao"].ToString());
                        usuConectNome = (reader["F.Nome"].ToString());

                        FrmPrincipal frmp = new FrmPrincipal();
                        frmp.NivelAcesso = Convert.ToString(NivelAcesso);
                        frmp.usuarioConectado = usuarioConectado;
                        frmp.usuConectNome = usuConectNome;

                        frmp.Show();
                        this.Hide();
                    }
                    reader.Close();
                }
            }
            catch(Exception ex)
            {
                MessageBox.Show("Não foi Possível Entrar !" + ex.Message, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

Post mais votado

Kelvin Ott
   - 26 ago 2014

Faça o select filtrando pelo login do funcionário e retornando a senha, se o select não retornar ninguém o login está errado. Se retornar porém a senha retornada não bate com a senha digitada a senha está errada.

#Código

SELECT F.Senha FROM Funcionario F " + " INNER JOIN Perfil P ON F.Perfil = P.IDPerfil Where F.Login = @LOGIN AND F.Situacao = true

Jair Souza
   - 26 ago 2014

Não funcionou, dá erro de login...

Clique na imagem para abrir em uma nova janela

Tentei dessa outra maneira, e acontece algo muito estranho, quando se digita o login ou senha errado os "if" atuam e dão a mensagem e quando digitado login e senha corretos só entra pro primeiro funcionário(Não consigo entender isto), para os outros 24 funcionário cadastrados da a mensagem de inválido...

#Código

OleDbCommand comando = new OleDbCommand("SELECT * FROM Funcionario F " + " INNER JOIN Perfil P ON F.Perfil = P.IDPerfil Where F.Login = @Login OR F.login IS NOT NULL And F.Senha = @Senha OR F.Senha IS NOT NULL AND F.Situacao = true", conexao);


Clique na imagem para abrir em uma nova janela

...e assim não entra nos "if" :

#Código
 OleDbCommand comando = new OleDbCommand("SELECT * FROM Funcionario F " + " INNER JOIN Perfil P ON F.Perfil = P.IDPerfil Where F.Login = @login OR F.Login Is Null AND F.Senha = @senha OR F.Senha Is Null AND F.Situacao = true", conexao);

Joel Rodrigues
   - 27 ago 2014

Pra esse tipo de verificação, geralmente eu faço da seguinte forma:
#Código

SELECT LOGIN, SENHA FROM USUARIOS WHERE LOGIN=@Login


Primeira verificação: se não retornar nenhuma linha, é porque o login não existe.
Segunda verificação: se retornar uma linha (o login está correto), verificar se o conteúdo da coluna SENHA é igual ao que foi digitado. Se não for, a senha está incorreta.

Jair Souza
   - 27 ago 2014

Sim e é isto que pensava estar fazendo...
Se não parametrizo a senha como posso compará-la ?
...o que preciso mudar neste meu código inicial, objetivamente ?

Joel Rodrigues
   - 27 ago 2014

Como eu citei no meu exemplo, você não faz a busca pela senha, faz apenas pelo login e recupera a senha referente a esse login.
SE o login estiver correto, então você compara com a senha que veio do select.

Kelvin Ott
   - 27 ago 2014

Leia com atenção, entenda o que está sendo dito no tópico, em seguida tente programar.

Jair Souza
   - 27 ago 2014

Entendi a lógica, vou testar.

Jair Souza
   - 27 ago 2014

Fiz as alterações, mas não sei como fazer a recuperação e a comparação da senha...pois se não leu não pode ser assim
#Código

else if (senhaTextBox.Text != reader["Senha"].ToString())


Como será ?

Kelvin Ott
   - 28 ago 2014

#Código

//Se entrar aqui o login é válido
				if(reader.HasRows)
				{
				  //Validação de senha, se for igual a senha também está correta
				  if(senhaTextBox.Text == reader["senha"].ToString())
				  {
				      
				  }
			      else
				  {
				    //Mensagem senha errada
				  }
				}
				else
				{
				  //Mensagem login errado
				}

Jair Souza
   - 28 ago 2014

...e tem também a verificação da situação que é "true" para ativo e "false" para inativo, como pode-se encaixar neste código, e dar uma mensagem de sem permissão no caso de "false", é bool e não sei como como recuperar e comparar ?

Estava no código inicial, mas acabou ficando de fora, rrrrs...

#Código

OleDbCommand comando = new OleDbCommand("SELECT * FROM Funcionario F " + " INNER JOIN Perfil P ON F.Perfil = P.IDPerfil Where F.Login = @Login And F.Senha = @Senha AND F.Situacao = true", conexao);

Joel Rodrigues
   - 28 ago 2014

Aproveitando o código do Kelvin:

#Código

//Se entrar aqui o login é válido
if(reader.HasRows)
{
    //Validação de senha, se for igual a senha também está correta
    if(senhaTextBox.Text == reader["senha"].ToString())
    {
        if(Convert.ToBoolean(reader["ativo"])
		{
			// Usuário ativo e senha correta
		}
		else
		{
			// Mensagem de usuário inativo
		}
    }
    else
    {
		//Mensagem senha errada
    }
}
else
{
    //Mensagem login errado
}

Jair Souza
   - 28 ago 2014

Alterei como vocês orientaram, e não estava funcionando dava erro "No data exists for the row/column", ajustei esta linha de "if (reader.HasRows)" para "if ((reader.HasRows) && (reader.Read()))", e foi só alegria, funcionou perfeitamente.

Valeu muito, muito... Kelvin e Joel, estou aprendendo muito com vocês, fiquem com Deus.

Ficou assim :

#Código

private void BtnEntrar_Click(object sender, EventArgs e)
        {
            try
            {
                OleDbConnection conexao = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Application.StartupPath + "\BDBiblioteca.mdb;Jet OLEDB:Database Password = grazi1vini2");

                OleDbCommand comando = new OleDbCommand("SELECT * FROM Funcionario F " + " INNER JOIN Perfil P ON F.Perfil = P.IDPerfil WHERE F.Login = @login", conexao);

                comando.Parameters.AddWithValue("@login ", loginTextBox.Text);
                
                OleDbDataReader reader = null;

                conexao.Open();

                reader = comando.ExecuteReader(CommandBehavior.CloseConnection);

                if ((reader.HasRows) && (reader.Read()))
                {
                    if(senhaTextBox.Text == reader["senha"].ToString())
                    {
                        if(Convert.ToBoolean(reader["situacao"]))
                        {
                            usuarioConectado = loginTextBox.Text;
                            NivelAcesso = (reader["Descricao"].ToString());
                            usuConectNome = (reader["F.Nome"].ToString());

                            FrmPrincipal frmp = new FrmPrincipal();
                            frmp.NivelAcesso = Convert.ToString(NivelAcesso);
                            frmp.usuarioConectado = usuarioConectado;
                            frmp.usuConectNome = usuConectNome;

                            frmp.Show();
                            this.Hide();
                        }
                        else
                        {
                            MessageBox.Show("Sem Permissão de Acesso !", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            loginTextBox.Clear();
                            senhaTextBox.Clear();
                            loginTextBox.Focus();
                        }
                    }
                    else
                    {
                        MessageBox.Show("Senha Inválida !", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        senhaTextBox.Clear();
                        senhaTextBox.Focus();
                    }
                }
                else
                {
                    MessageBox.Show("Login Inválido !", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    loginTextBox.Clear();
                    loginTextBox.Focus();
                }
                reader.Close();
            }
            catch(Exception ex)
            {
                MessageBox.Show("Não foi Possível Entrar !" + ex.Message, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }