VB.NET 2005  - Criando uma aplicação Windows Completa: Locadora de Filmes - Parte 3


Continuando o desenvolvimento do nosso projeto Locadora de Filmes no Visual Basic 2005 Express Edition este artigo irá continuar a mostrar a implementação da interface do usuário. Se você esta chegando agora recomendo leia os artigos :

  1.  VB.NET  2005 - Criando uma aplicação completa : Locadora de Filmes I

  2.  VB.NET  2005 - Criando uma aplicação completa : Locadora de Filmes II

Para saber o que mudou na versão do VS 2012 Acompanhe o Curso - VB .NET  - ADO .NET Prático (Curso)

Neste artigo vou mostrar como implementar os formulários Login.vb e Acesso.vb.

Eu não vou usar o assistente do VB2005 para criar estes formulários como uma forma de mostrar que você pode criar, a seu critério, e, via código, funcionalidades de acesso a dados em formulários Windows Forms.

Implementando o formulário de Login

Como já vimos no artigo anterior o formulário de login - Login.vb - foi criado a partir de um modelo já existente no VB 2005.

O formulário login.vb permite efetuar uma validação do usuário com nome e senha.

Vamos implementar o recurso criando uma tabela chamada Usuarios com os campos: nomeUsuario e SenhaId.

A senha será armazenada na forma de um Hash que iremos gerar usando uma classe.

Incluímos um controle CheckBox para permitir que o nome do usuário seja armazenado na aplicação.

O código do evento Click do botão OK para este formulário é exibido abaixo:

Nota: Não esqueça de declarar os seguintes imports:  Imports System.Data.SqlClient

Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click


Dim
conn As New SqlConnection

Dim comando As New SqlCommand

Dim senhaID As String


conn.ConnectionString =
My.Settings.LocadoraConnectionString


Try

  conn.Open()
 

  comando.Connection = conn

  comando.CommandText = "SELECT senhaID FROM usuarios Where nomeUsuario=@nomeUsuario"

  comando.Parameters.AddWithValue("@nomeUsuario", UsernameTextBox.Text)


  senhaID = comando.ExecuteScalar
 

  conn.Close()
 

   If chkLembraUsuario.Checked Then

       My.Settings.Usuario = UsernameTextBox.Text

       My.Settings.Save()

   Else

        My.Settings.Usuario = ""

   End If
 

   If util.GeraHash(PasswordTextBox.Text).Equals(senhaID) Then

       My.Forms.Principal.Show()

       Me.Hide()

    Else

        MessageBox.Show("Senha/Usuário Incorreto(s)", "Senha incorreta", MessageBoxButtons.OK, MessageBoxIcon.Information)

        PasswordTextBox.Focus()

    End If


Catch
ex As SqlException

     MessageBox.Show("Erro ao efetuar a conexão com a base de dados : " + ex.Message)

     conn.Dispose()

End Try


End
Sub

Explicando o código:

A linha de código:

   conn.ConnectionString = My.Settings.LocadoraConnectionString

permite a recuperação da string de conexão usando o recurso My.Settings

Após abrir a conexão criamos um comando com a instrução SQL que irá selecionar a senha da tabela usuarios onde o nome do usuário é passado como parâmetro conforme o código abaixo:

   comando.Connection = conn

   comando.CommandText = "SELECT senhaID FROM usuarios Where nomeUsuario=@nomeUsuario"

   comando.Parameters.AddWithValue("@nomeUsuario", UsernameTextBox.Text)

A seguir obtemos  o valor da Senha através da execução do método ExecuteScalar

O objeto Command fornece o método ExecuteScalar que permite retornar um valor único de uma fonte de dados. Este método executa uma consulta e retorna a primeira coluna da primeira linha do conjunto de registros retornado

O método ExecuteScalar é o meio mais rápido de se acessar e retornar dados em um base de dados.

   senhaID = comando.ExecuteScalar

Verificamos se o checkbox esta marcado; neste caso salvamos o nome do usuário nas configurações da aplicação.

  If chkLembraUsuario.Checked Then

       My.Settings.Usuario = UsernameTextBox.Text

       My.Settings.Save()

   Else

        My.Settings.Usuario = ""

   End If

A seguir o método GeraHash da classe util é usado para gerar o hash da senha informada para comparar com o hash armazenado no banco de dados.(isto será feito via formulário acesso.vb).

   If util.GeraHash(PasswordTextBox.Text).Equals(senhaID) Then

       My.Forms.Principal.Show()

       Me.Hide()

    Else

        MessageBox.Show("Senha/Usuário Incorreto(s)", "Senha incorreta", MessageBoxButtons.OK, MessageBoxIcon.Information)

        PasswordTextBox.Focus()

    End If

Nota: O recurso My usado em  My.Forms.Principal.Show() permite exibir o formulário de forma rápida e direta.

Para implementar A classe util e seu método GeraHash inclua um novo módulo de classe no projeto. Menu Project opção Add Class inclua o módulo dando ao mesmo o nome util.vb. A seguir inclua o código abaixo na classe:

Imports System.Security.Cryptography

Imports System.text
 

Public Class util


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


'Cria um objeto enconding para assegurar o padrão

'de encondig para o texto origem

Dim Ue As New UnicodeEncoding()


'Retorna um byte array baseado no texto origem

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


'Instancia um objeto MD5

Dim Md5 As New MD5CryptoServiceProvider()


'Calcula o valor do hash para o texto origem

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


'Converte o valor obtido para o formato string

Return Convert.ToBase64String(ByteHash)

End Function


End
Class

Implementando o formulário de Acesso

O formulário acesso permite o cadastramento de usuários e senhas na base de dados Acesso.mdb , tabela Usuarios. São armazenados o nome do usuário e o hash da senha informada.

Os demais componentes do formulário são:
  • TextBox : txtUsuario, TxtSenha e TxtSenha2
  • Button : btnRegistrar e btnCancelar

O código do evento Click do botão Registrar é mostrado a seguir:

Private Sub btnRegistrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRegistrar.Click


Dim conn As New SqlConnection

Dim comando As New SqlCommand

Dim reg As Integer


conn.ConnectionString =
My.Settings.LocadoraConnectionString


If
txtUsuario.Text = ""
Then

   MessageBox.Show("Informe um valor válido.")

   txtUsuario.Focus()

   Exit Sub

End If

 

If txtsenha.Text = "" Then

   MessageBox.Show("Informe um valor válido.")

   txtsenha.Focus()

   Exit Sub

End If

 

If Not txtsenha.Text.Equals(txtSenha2.Text) Then

   MessageBox.Show("A senha não confere.")

   txtSenha2.Focus()

   Exit Sub

End If

 

Try

  conn.Open()

  comando.Connection = conn

  comando.CommandText = "INSERT INTO Usuarios(nomeUsuario,senhaID) values(@Usuario,@senha)"

  comando.Parameters.AddWithValue("@Usuario", txtUsuario.Text)

  comando.Parameters.AddWithValue("@senha", util.GeraHash(txtsenha.Text))

 

  reg = comando.ExecuteNonQuery()

 

  MessageBox.Show(reg.ToString + " registro de Usuário incluido com sucesso.")

Catch ex As SqlException

  MessageBox.Show("Erro ao efetuar a conexão com a base de dados : " + ex.Message)

Finally

  conn.Close()

  conn.Dispose()

End Try

End Sub

 

Neste código estamos incluindo, via instrução SQL INSERT INTO,  o nome do usuário e a senha informada na tabela usuarios. Os parâmetros são montados com os dados das caixas de texto, e, o método GeraHash() é usado para gerar o hash do texto da senha informado.

  conn.Open()

  comando.Connection = conn

  comando.CommandText = "INSERT INTO Usuarios(nomeUsuario,senhaID) values(@Usuario,@senha)"

  comando.Parameters.AddWithValue("@Usuario", txtUsuario.Text)

  comando.Parameters.AddWithValue("@senha", util.GeraHash(txtsenha.Text))

 

O método executeNonQuery() é usado para executar a consulta ação. Este método é usado para  executar um comando SQL que não retorna registros.

 

  reg = comando.ExecuteNonQuery()

Nossa aplicação já possui uma forma de cadastrar os seus usuários via formulário acesso.vb e de permitir a validação dos mesmos para acesso a aplicação via formulário login.vb.

Nota: Para permitir que a mudança de um campo para outro do formulário seja possível com o pressionamento da tecla ENTER altere a propriedade KeyPreview do formulário para True e inclua o seguinte trecho de código

Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress


If
e.KeyChar = Convert.ToChar(13)
Then

   e.Handled = True

    SendKeys.Send("{TAB}")

End If


End
Sub

 

Aguarde a continuação no artigo : VB.NET 2005  - Criando uma aplicação Windows Completa: Locadora de Filmes - Parte 4

VB.NET 2005 , é fácil, é simples, é legal. Divirta-se... 

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

 

             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti