none
Como comparar o que está sendo digitado na tela de login como o que está no banco de dados? RRS feed

  • Pergunta

  • Olá, minha dúvida é a seguinte: como posso comparar o que está sendo digitado na tela de login como o que está no banco de dados?

    Tenho o seguinte código que ainda está no início:

    Protected Sub cmdLogin_Click(sender As Object, e As EventArgs) Handles cmdLogin.Click
    
            Dim usuario As Usuario
            usuario = New Usuario
    
            usuario.NomeUsuario = txtUsuario.Text
            usuario.Senha = txtSenha.Text
    
        End Sub

    Gostaria de saber se estou indo no caminho certo.

    Desde já agradeço a atenção.


    Atenciosamente, Marcio Nogueira Cardoso Pinto.

    quinta-feira, 17 de abril de 2014 14:20

Respostas

  • Olá. Está no caminho certo sim.

    O que voce precisa agora é criar uma rotina que acesse a sua tabela no banco de dados e compare as informações digitadas pelo usuário com o que está cadastrado em sua tabela de usuário.

    Abaixo tem alguns link que explicam esse processo.

    Abraços


    Washington Luíz | MCP, MCTS
    Belo Horiozonte - MG
    O Senhor é minha força e somente Nele eu confio.

    • Marcado como Resposta Marcio_Nogueira quinta-feira, 17 de abril de 2014 15:14
    quinta-feira, 17 de abril de 2014 14:53
  • Fala Márcio.

    Fiz umas alterações no seu código. Voce não precisa de um SQL para o usuario e outro para a senha.

    Você pode fazer tudo de uma vez. Veja como ficou:

    Protected Sub cmdLogin_Click(sender As Object, e As EventArgs) Handles cmdLogin.Click
    	Dim strConexao As String = "Server=localhost;Ports=5432;User Id=postgres;Password=Gx12J@27;Database=curso"
    	Dim sqlUsuario As String = "select usuario, senha from usuario where usuario=@usuario and senha=@senha"
    	
    	Dim objDR as NpgsqlDataReader
    	Dim conn As NpgsqlConnection = New NpgsqlConnection(strConexao)
    	Dim strUsuario As String = txtUsuario.Text
    	Dim strSenha As String = txtSenha.Text
    
    	Dim cmd as New NpgsqlCommand(sqlUsuario, conn)
    	cmd.Parameters.Add(New NpgsqlParameter("@usuario", strUsuario))
            cmd.Parameters.Add(New NpgsqlParameter("@senha", strSenha))
    
    	Try
    	   conn.Open()
    	   objDR = cmd.ExecuteReader(CommandBehavior.CloseConnection)
               If objDR.Read() Then
    	      Response.Write("Usuário Valido")
               Else
                  Response.Write("Usuário/Senha Inválido(s) , tente novamente.")
               End If
    	Catch ex As Exception
      	   Response.Write("Ocorreu um erro: " & ex.Message)
    	Finally
     	  conn.Close()
    	End Try
    End Sub

    Abraços.


    Washington Luíz | MCP, MCTS
    Belo Horiozonte - MG
    O Senhor é minha força e somente Nele eu confio.


    • Editado Washington quinta-feira, 17 de abril de 2014 16:24
    • Sugerido como Resposta Diogo Ichiyama quinta-feira, 17 de abril de 2014 17:31
    • Marcado como Resposta Marcio_Nogueira quinta-feira, 17 de abril de 2014 18:38
    quinta-feira, 17 de abril de 2014 16:22
  • No trecho de código abaixo, passo o objeto aluno com os dados digitados no form para comparar com os dados do banco:
    Dim usuario As Usuario
            usuario = New Usuario
    
            usuario.NomeUsuario = txtUsuario.Text
            usuario.Senha = txtSenha.Text
    
            Dim strSql As String = "select usuario,senha from usuario where usuario='" & usuario.NomeUsuario & "' and senha='" & usuario.Senha & "'"


    Atenciosamente, Marcio Nogueira Cardoso Pinto.

    Usuario é uma classe ? Se sim em vez de DataTable utilize List(Of Usuario) mais simples, depois para fazer as consultas fica mais dinâmico. E com DataReader fica mais rápido do que utilizando DataAdapter...
    • Marcado como Resposta Marcio_Nogueira sexta-feira, 18 de abril de 2014 18:21
    sexta-feira, 18 de abril de 2014 03:47
  • Então você pode buscar os dados usando Lambda ou linq evita muitos codigos veja :

    Sub BuscaUsuario(ByVal nomeUsuario As String)
    {
    
      Using db As New SeuContexto()
         
        Dim user As New TB_USUARIO()
    
        user = db.TB_USUARIO.Where(Function(i As TB_USUARIO) i.NomeUsuario = nomeUsuario).FirstOrDefault()
    
    
    'caso user ser null ou nothing nao existe o usuario
    'caso nao ser nulo vai vir a linha com todos os registros
    'na variavel user que é sua entidade
    
      EndUsing
    
    
    }

    • Marcado como Resposta Marcio_Nogueira sexta-feira, 18 de abril de 2014 22:27
    sexta-feira, 18 de abril de 2014 21:58

Todas as Respostas

  • Olá. Está no caminho certo sim.

    O que voce precisa agora é criar uma rotina que acesse a sua tabela no banco de dados e compare as informações digitadas pelo usuário com o que está cadastrado em sua tabela de usuário.

    Abaixo tem alguns link que explicam esse processo.

    Abraços


    Washington Luíz | MCP, MCTS
    Belo Horiozonte - MG
    O Senhor é minha força e somente Nele eu confio.

    • Marcado como Resposta Marcio_Nogueira quinta-feira, 17 de abril de 2014 15:14
    quinta-feira, 17 de abril de 2014 14:53
  • Segue abaixo a evolução do código:
    Protected Sub cmdLogin_Click(sender As Object, e As EventArgs) Handles cmdLogin.Click
            Dim strConexao As String = "Server=localhost;Ports=5432;User Id=postgres;Password=Gx12J@27;Database=curso"
    
            Dim conn As NpgsqlConnection
            conn = New NpgsqlConnection(strConexao)
    
            Dim sqlUsuario As String = "select usuario from usuario"
            Dim sqlSenha As String = "select senha from usuario"
    
            Dim daUsuario As NpgsqlDataAdapter
            daUsuario = New NpgsqlDataAdapter(sqlUsuario, conn)
    
            Dim daSenha As NpgsqlDataAdapter
            daSenha = New NpgsqlDataAdapter(sqlSenha, conn)
    
            Dim dtUsuario As DataTable
            dtUsuario = New DataTable
    
            Dim usuario As Usuario
            usuario = New Usuario
    
            usuario.NomeUsuario = txtUsuario.Text
            usuario.Senha = txtSenha.Text
    
            Try
                conn.Open()
                daUsuario.Fill(dtUsuario)
                daSenha.Fill(dtUsuario)
    
            Catch ex As Exception
            Finally
                conn.Close()
            End Try
    
        End Sub


    Atenciosamente, Marcio Nogueira Cardoso Pinto.

    quinta-feira, 17 de abril de 2014 15:15
  • Fala Márcio.

    Fiz umas alterações no seu código. Voce não precisa de um SQL para o usuario e outro para a senha.

    Você pode fazer tudo de uma vez. Veja como ficou:

    Protected Sub cmdLogin_Click(sender As Object, e As EventArgs) Handles cmdLogin.Click
    	Dim strConexao As String = "Server=localhost;Ports=5432;User Id=postgres;Password=Gx12J@27;Database=curso"
    	Dim sqlUsuario As String = "select usuario, senha from usuario where usuario=@usuario and senha=@senha"
    	
    	Dim objDR as NpgsqlDataReader
    	Dim conn As NpgsqlConnection = New NpgsqlConnection(strConexao)
    	Dim strUsuario As String = txtUsuario.Text
    	Dim strSenha As String = txtSenha.Text
    
    	Dim cmd as New NpgsqlCommand(sqlUsuario, conn)
    	cmd.Parameters.Add(New NpgsqlParameter("@usuario", strUsuario))
            cmd.Parameters.Add(New NpgsqlParameter("@senha", strSenha))
    
    	Try
    	   conn.Open()
    	   objDR = cmd.ExecuteReader(CommandBehavior.CloseConnection)
               If objDR.Read() Then
    	      Response.Write("Usuário Valido")
               Else
                  Response.Write("Usuário/Senha Inválido(s) , tente novamente.")
               End If
    	Catch ex As Exception
      	   Response.Write("Ocorreu um erro: " & ex.Message)
    	Finally
     	  conn.Close()
    	End Try
    End Sub

    Abraços.


    Washington Luíz | MCP, MCTS
    Belo Horiozonte - MG
    O Senhor é minha força e somente Nele eu confio.


    • Editado Washington quinta-feira, 17 de abril de 2014 16:24
    • Sugerido como Resposta Diogo Ichiyama quinta-feira, 17 de abril de 2014 17:31
    • Marcado como Resposta Marcio_Nogueira quinta-feira, 17 de abril de 2014 18:38
    quinta-feira, 17 de abril de 2014 16:22
  • Fala Márcio.

    Fiz umas alterações no seu código. Voce não precisa de um SQL para o usuario e outro para a senha.

    Você pode fazer tudo de uma vez. Veja como ficou:

    Protected Sub cmdLogin_Click(sender As Object, e As EventArgs) Handles cmdLogin.Click
    	Dim strConexao As String = "Server=localhost;Ports=5432;User Id=postgres;Password=Gx12J@27;Database=curso"
    	Dim sqlUsuario As String = "select usuario, senha from usuario where usuario=@usuario and senha=@senha"
    	
    	Dim objDR as NpgsqlDataReader
    	Dim conn As NpgsqlConnection = New NpgsqlConnection(strConexao)
    	Dim strUsuario As String = txtUsuario.Text
    	Dim strSenha As String = txtSenha.Text
    
    	Dim cmd as New NpgsqlCommand(sqlUsuario, conn)
    	cmd.Parameters.Add(New NpgsqlParameter("@usuario", strUsuario))
            cmd.Parameters.Add(New NpgsqlParameter("@senha", strSenha))
    
    	Try
    	   conn.Open()
    	   objDR = cmd.ExecuteReader(CommandBehavior.CloseConnection)
               If objDR.Read() Then
    	      Response.Write("Usuário Valido")
               Else
                  Response.Write("Usuário/Senha Inválido(s) , tente novamente.")
               End If
    	Catch ex As Exception
      	   Response.Write("Ocorreu um erro: " & ex.Message)
    	Finally
     	  conn.Close()
    	End Try
    End Sub

    Abraços.


    Washington Luíz | MCP, MCTS
    Belo Horiozonte - MG
    O Senhor é minha força e somente Nele eu confio.



    Gostei, ficou melhor mesmo
    quinta-feira, 17 de abril de 2014 17:31
  • Você utilizou um command, estou utilizando uma adapter para popular um datatable com os dados do banco para em seguida comparar com o que foi digitado. Obrigado pela dica!

    Atenciosamente, Marcio Nogueira Cardoso Pinto.

    quinta-feira, 17 de abril de 2014 18:41
  • where usuario=@usuario and senha=@senha"
    Esta sintaxe que você utilizou pode ser utilizada no PostgreSQL?

    Atenciosamente, Marcio Nogueira Cardoso Pinto.

    quinta-feira, 17 de abril de 2014 18:44
  • Estou pensando em usar um datatable para armazenar o usuário e a senha para depois fazer a comparação dos dados digitados no form pelo usuário que está sendo autenticado.

    Atenciosamente, Marcio Nogueira Cardoso Pinto.

    sexta-feira, 18 de abril de 2014 02:39
  • No trecho de código abaixo, passo o objeto aluno com os dados digitados no form para comparar com os dados do banco:
    Dim usuario As Usuario
            usuario = New Usuario
    
            usuario.NomeUsuario = txtUsuario.Text
            usuario.Senha = txtSenha.Text
    
            Dim strSql As String = "select usuario,senha from usuario where usuario='" & usuario.NomeUsuario & "' and senha='" & usuario.Senha & "'"


    Atenciosamente, Marcio Nogueira Cardoso Pinto.

    sexta-feira, 18 de abril de 2014 02:50
  • No trecho de código abaixo, passo o objeto aluno com os dados digitados no form para comparar com os dados do banco:
    Dim usuario As Usuario
            usuario = New Usuario
    
            usuario.NomeUsuario = txtUsuario.Text
            usuario.Senha = txtSenha.Text
    
            Dim strSql As String = "select usuario,senha from usuario where usuario='" & usuario.NomeUsuario & "' and senha='" & usuario.Senha & "'"


    Atenciosamente, Marcio Nogueira Cardoso Pinto.

    Usuario é uma classe ? Se sim em vez de DataTable utilize List(Of Usuario) mais simples, depois para fazer as consultas fica mais dinâmico. E com DataReader fica mais rápido do que utilizando DataAdapter...
    • Marcado como Resposta Marcio_Nogueira sexta-feira, 18 de abril de 2014 18:21
    sexta-feira, 18 de abril de 2014 03:47
  • Oi Daniel, sim usuário é uma entidade (classe) persistente para o Entity Framework. Você poderia dar um exemplo de como posso comparar os dados digitados no form de login utilizando o List?

    Desde já agradeço a atenção.


    Atenciosamente, Marcio Nogueira Cardoso Pinto.

    sexta-feira, 18 de abril de 2014 18:24
  • Você utiliza Entity Framework para acesso a dados ? 
    sexta-feira, 18 de abril de 2014 18:31
  • Para persistir dados, mas as classes são mapeadas usando data anotations.

    Atenciosamente, Marcio Nogueira Cardoso Pinto.

    sexta-feira, 18 de abril de 2014 18:51
  • Então você pode buscar os dados usando Lambda ou linq evita muitos codigos veja :

    Sub BuscaUsuario(ByVal nomeUsuario As String)
    {
    
      Using db As New SeuContexto()
         
        Dim user As New TB_USUARIO()
    
        user = db.TB_USUARIO.Where(Function(i As TB_USUARIO) i.NomeUsuario = nomeUsuario).FirstOrDefault()
    
    
    'caso user ser null ou nothing nao existe o usuario
    'caso nao ser nulo vai vir a linha com todos os registros
    'na variavel user que é sua entidade
    
      EndUsing
    
    
    }

    • Marcado como Resposta Marcio_Nogueira sexta-feira, 18 de abril de 2014 22:27
    sexta-feira, 18 de abril de 2014 21:58
  • Obrigado pela dica.

    Atenciosamente, Marcio Nogueira Cardoso Pinto.

    sexta-feira, 18 de abril de 2014 22:28