DreamPearl Posted May 9, 2009 at 03:24 PM Report #262636 Posted May 9, 2009 at 03:24 PM 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.CryptographyImports 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!
Hellblazer Posted May 9, 2009 at 04:13 PM Report #262645 Posted May 9, 2009 at 04:13 PM 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.
DreamPearl Posted May 9, 2009 at 04:54 PM Author Report #262662 Posted May 9, 2009 at 04:54 PM yah Axo k esta correcto.... qd faço debug aparece o form sem probelmas so k kd dou login aparece a msgbox "Senha inválida!" :bored:
Hellblazer Posted May 10, 2009 at 11:48 AM Report #262801 Posted May 10, 2009 at 11:48 AM 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.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now