Jump to content

Recommended Posts

Posted

Olá a todos !

Precisava de um form em vb2008 com 2 textbox (utilizador e password) e um botao login. a tabela ´k esta por detras é "utiliz" e tem dois campos 'Utilizador' e 'Password'.

No evento click do botao login pus o seguinte:

Imports System.Security.Cryptography

Imports System.Text

Module Login2

  Public g_login As String

    Public conString As String

    Public DBCon As System.Data.OleDb.OleDbConnection

    Public Class utiliz

    Public Shared Function GeraHash(ByVal texto As String) As String

Dim Ue As New UnicodeEncoding

Dim ByteSourceText() As Byte = Ue.GetBytes(texto)

Dim Md5 As New MD5CryptoServiceProvider

Dim ByteHash() As Byte = Md5.ComputeHash(ByteSourceText)

Return Convert.ToBase64String(ByteHash)

        End Function

    End Class

End Module

Public Class frmLogin

    Dim iConta As Integer

    Dim frmMain As New Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim ConString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\gestao.mdb"

        Dim DBCon As New OleDb.OleDbConnection(ConString)

        Dim strSenha As String

        strSenha = TextBox2.Text

        g_login = Me.TextBox1.Text

        If g_login = String.Empty Or strSenha = String.Empty Then

            MessageBox.Show("Informação Incompleta. Preencha os campos com o nome do usuário e senha.", "Informação Incompleta")

            Me.TextBox1.Focus()

            Return

        End If

        Dim strsql As String = "SELECT * FROM Utiliz WHERE Utilizador='" & g_login & "'"

        'define um comando sobe a conexão para selecionar o usuario e a senha

        Dim cm As New OleDb.OleDbCommand(strsql, DBCon)

        'cria um objeto datareader

        Dim dr As OleDb.OleDbDataReader

        'define variaveis de controle

        Dim valido As Boolean = False

        Dim Flag As Boolean = False

        Try

            'abre a conexao

            DBCon.Open()

            'executa um comando e gera um datareader (dr)

            dr = cm.ExecuteReader

            'se houver dados retornados

            If dr.HasRows Then

                'percorre o datareader

                While dr.Read

                    'se o Hash da senha informada for igual ao hash armazenado no banco de dados define

                    'a variavel valido como True

                    If utiliz.GeraHash(strSenha) = dr.Item("Password") Then

                        valido = True

                    End If

                End While

                'define a variavel controle Flag como true

                Flag = True

            End If

            'fecha o datareader

            dr.Close()

            'incrementa o contador de tentativas

            iConta = iConta + 1

            'se a senha é valida exibe o formulário principal

            If valido = True Then

                Me.Hide()

                frmMain.Show()

                'se o numero de tentativas for maior que 3 então avisa ao usuário

                'ElseIf iConta > 3 Then

                '  Me.Text = "Login - Tentativa " & iConta.ToString

                '  MessageBox.Show(" Você ultrapassou o número de tentativas. Contacte o suporte !", "Número de tentativas ultrapassado.")

                ' Me.Close()

                'se Flag for false então o usuário é inválido

            ElseIf Flag = False Then

                MessageBox.Show("Nome de usuário Inválido, tente novamente ! ", "Informação Inválida")

                Me.TextBox1.Focus()

                Me.TextBox1.Text = ""

                Me.TextBox2.Text = ""

                'Me.Text = "Login - Tentativa " & iConta.ToString

            Else

                'senha inválida

                MessageBox.Show("Senha Inválida, tente novamente ! ", "Informação Inválida")

                Me.TextBox1.Text = ""

                Me.TextBox2.Focus()

                Me.TextBox2.Text = ""

                Me.Text = "Login -  Tentativa " & iConta.ToString

            End If

            'trata as excepções

        Catch exOledb As OleDb.OleDbException

            MessageBox.Show(exOledb.Message, "Erro de acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error)

        Catch ex As Exception

            MessageBox.Show(ex.Message, "Erro genérico", MessageBoxButtons.OK, MessageBoxIcon.Error)

        Finally

            'se a conexão esta aberta fecha e libera os objetos

            If DBCon.State = ConnectionState.Open Then

                DBCon.Close()

            End If

            cm = Nothing

            dr = Nothing

            DBCon.Dispose()

         

            GC.Collect()

        End Try

    End Sub

End Class

A parte do contador está parcialmente desactiva, mas fui eu k fiz.

Agora o erro k dá é sempre a mensagem de Password inválida!, não sei porkê se os daados sao os k tao na base de dados.

desde ja obrigada!

Posted

Verificas-te atravez do debug se a Hash da password que inseris-te está correcta? se o login que inseris-te está correcto? corre em modo debug e verifica o porque de ele nao meter a variavel valido a true 😕

There are two ways to write error-free programs; only the third one works.

Posted

Insere um breakpoint nesta linha.

- If utiliz.GeraHash(strSenha) = dr.Item("Password") Then

E faz um adwatch no utiliz.GeraHash(strSenha) e no dr.Item("Password").

Verifica se são iguais.

Poderá ser de retornar mais que um resultado tambem 😕 devias fazer um Select TOP 1.

There are two ways to write error-free programs; only the third one works.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.