C# - Login com Fluent NHibernate, NHibernate 4.0 e PostGreSql - II


 Esta é a versão C# do artigo que mostra como usar o Fluent NHibernate e o NHibernate 4.0 para criar uma aplicação que realiza o login e faz o registro de um novo usuário no banco de dados PostgreSQL mostrando também como realizar as operações CRUD de manutenção dos usuários usando o padrão Repository.

Na primeira parte deste artigo criamos o banco de dados Cadastro e a tabela  usuarios no PostgreSQL , criamos o projeto no Visual Studio, definimos as referências ao NHibernate, Fluent NHibernate e ao provedor Npgsql,  definimos as entidades, o mapeamento e criamos a nossa SessionFactory e o nosso repositório. Quanto trabalho não é mesmo ?

Agora vamos continuar criando os formulários de login e registro no projeto Usuarios e mostrar realizar o login e registrar usuários.

Criando o formulário de login e de registro

No projeto Usuarios altere o nome do formulário form1.vb para frmLogin.vb e a seguir inclua neste formulário os seguintes controles a partir da ToolBox:

Disponha os controles conforme o leiaute da figura abaixo:

 

Vamos incluir os formulários frmRegistro e frmMenu no projeto.

No menu PROJECT clique em Add Windows Forms e informe o nome frmRegistro.cs.

Repita o procedimento e informe o nome frmMenu.cs. Vamos definir o leiaute desses formulários mais a frente.

Agora no código do formulário frmLogin.cs vamos primeiro incluir uma declaração para referenciar o projeto Repositorio:

Using Repositorio;

Logo após a declaração do formulário vamos definir uma variável do tipo UsuarioRepositorio:

UsuarioRepositorio usuarioRepo;

A seguir no evento Click do botão Login digite o código abaixo:

  private void btnLogin_Click(object sender, System.EventArgs e)
   {
            errorProvider1.Clear();
            if (txtUsuario.Text == string.Empty)
            {
                errorProvider1.SetError(txtUsuario, "Informe o login do usuário");
                return;
            }
            if (txtSenha.Text == string.Empty)
            {
                errorProvider1.SetError(txtSenha, "Informe a senha do usuário");
                return;
            }
            try
            {
                usuarioRepo = new UsuarioRepositorio();
                if ((usuarioRepo.ValidarAcesso(txtUsuario.Text, txtSenha.Text)))
                {
                    this.Hide();
                    frmMenu frmmnu = new frmMenu();
                    frmmnu.Show();
                }
                else
                {
                    MessageBox.Show("Login e/ou Senha inválidos", "Login Inválido", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch(Exception ex)
            {
                MessageBox.Show("Erro ao acessar o sistema" + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
   }

Este código após realizar as validações das caixas de texto : txtUsuario, txtSenha, cria uma instância da classe UsuarioRepositorio e usa o método ValidarAcesso() para verificar se o usuário esta cadastrado e ativo na tabela usuarios.

Vamos criar uma rotina chamada ExibirUsuarios() que exibe os usuários cadastrados no controle DataGridView - dgvUsuarios.

A seguir temos o código desta rotina criada no formulário:

private void ExibirUsuarios()
{
	dao = new UsuarioRepositorio();
	dgvUsuarios.DataSource = dao.Consultar();
}

No menu Exibir inclua o código abaixo que irá chamar a rotina ExibirUsuarios:

 private void exibirToolStripMenuItem_Click(object sender, EventArgs e)
 {
        ExibirUsuarios();
 }

No evento Click do controle LinkLabel - Registrar Novo Usuário - inclua o código para chamar o formulário frmRegistro:

 private void lnklbRegistrar_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
 {
            frmRegistro frmreg = new frmRegistro();
            frmreg.Show();
 }

E no evento Click da opção Registrar do menu inclua o código abaixo que simula o evento Click do controle LinkLabel acima:

 private void registrarToolStripMenuItem_Click(object sender, EventArgs e)
 {
            //frmRegistro frmreg = new frmRegistro();
            //frmreg.Show();
            lnklbRegistrar_LinkClicked(lnklbRegistrar, null);
  }

Assim não estamos duplicando código e estamos chamando a mesma rotina para abrir o formulário de registro.

Agora vamos incluir os dois formulários ao projeto : frmRegistro e frmMenu.

No menu PROJECT clique em Add Windows Forms e informe o nome frmRegistro.cs.

Repita o procedimento e inclua o formulário frmMenu.cs.

No formulário frmRegistro inclua os seguintes controles a partir da ToolBox:

Disponha os controles no formulário conforme o leiaute abaixo:

No código do formulário vamos primeiro incluir uma declaração para referenciar o projeto Repositorio e a pasta Entidades;

using Repositorio;
using Repositorio.Entidades;

No evento Load do formulário vamos definir o código para atribuir o primeiro item ao controle cboStatus e para por o foco no controle txtNome:

private void frmRegistro_Load(object sender, EventArgs e)
{
            cboStatus.SelectedIndex = 0;
            this.ActiveControl = txtNome;
            txtNome.Focus();
 }

A seguir no evento Click do botão Incluir digite o código abaixo:

  private void btnIncluir_Click(object sender, EventArgs e)
        {
            errorProvider1.Clear();
            if (txtNome.Text == string.Empty)
            {
                errorProvider1.SetError(txtNome, "Informe o nome do usuário");
                return;
            }
            if (txtLogin.Text == string.Empty)
            {
                errorProvider1.SetError(txtLogin, "Informe o login do usuário");
                return;
            }
            if (txtSenha.Text == string.Empty)
            {
                errorProvider1.SetError(txtSenha, "Informe a senha do usuário");
                return;
            }
            UsuarioRepositorio usuarioRepo = new UsuarioRepositorio();
            if ((usuarioRepo.ValidarLogin(txtLogin.Text)))
            {
                MessageBox.Show("Login já esta Cadastrado", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                try
                {
                    Usuario user = new Usuario();
                    user.Login = txtLogin.Text;
                    user.Nome = txtNome.Text;
                    user.Senha = txtSenha.Text;
                    user.Status = retornaStatus();
                    usuarioRepo.Inserir(user);

                }
                catch (Exception ex)
                {
                    MessageBox.Show("Erro ao cadastrar " + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                MessageBox.Show("Login Cadastrado com sucesso", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

 Este código após realizar as validações das caixas de texto : txtNome,  txtLogin e txtSenha, cria uma instância da classe UsuarioRepositorio e usa o método ValidarLogin() para verificar se o login do usuário esta cadastrado. Se o login estiver cadastrado será exibida uma alerta, ao usuário caso contrário será criado um novo objeto Usuario que receberá os valores digitados nas caixas de texto e usando o método Inserir do repositório para incluir o novo usuário.

Nota: Talvez a utilização da combobox para exibir o status do usuário não fosse necessária e a  definição de ativo ou inativo no registro de usuário devesse ser automática para o registro de usuário. No entanto resolvi mostrar como podemos tratar esse item. Se desejar pode remover o controle e o código correspondente.

A rotina retornaStatus() apenas ajusta o valor atribuído ao campo Status. O seu código é dado abaixo:

 private char retornaStatus()
 {
            if (cboStatus.Text == "Ativo")
            {
                return 'A';
            }
            else if (cboStatus.Text == "Inativo")
            {
                return 'I';
            }
            else
            {
                return 'A';
            }
  }

No evento Click do botão Sair temos o código abaixo que encerra o formulário:

 private void btnSair_Click(object sender, EventArgs e)
 {
      this.Close();
 }

O formulário frmMenu é usado apenas para exibir uma mensagem de bem-vindo ao usuário quando o login é efetuado com sucesso. Abaixo temos o seu leiaute:

Executando o projeto teremos:

 
 

Você pode incluir outros campos no login como email (usado para enviar a senha quando o usuário a esquece) e data de registro e também não precisa exibir a senha do usuário no DataGridView ocultando essa informação. Esses detalhes são simples de tratar e fica como exercício você decidir se vai ou não usar.

Na última parte do artigo irei implementar as funcionalidades para procurar um usuário, alterar e realizar a exclusão.

Pegue o projeto completo aqui: ControleUsuariosCSharp.zip (sem as referências)

João 6:35 Declarou-lhes Jesus. Eu sou o pão da vida; aquele que vem a mim, de modo algum terá fome, e quem crê em mim jamais terá sede.

João 6:36 Mas como já vos disse, vós me tendes visto, e contudo não credes.

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

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?


Referências:


José Carlos Macoratti