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:
1 GroupBox : Text = Registrar Usuario
4 Label
3 TextBox : txtNome, txtLogin, txtSenha
1 Combobox : cboStatus ( Ativo e Inativo)
2 Button : btnIncluir e btnSair
1 ErrorProvider
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:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#