Skip to content

Instantly share code, notes, and snippets.

@maxcnunes
Created February 5, 2012 21:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save maxcnunes/1748064 to your computer and use it in GitHub Desktop.
Save maxcnunes/1748064 to your computer and use it in GitHub Desktop.
WindowsForm-Entidades-RepositorioAdoNet
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MDI_Escola.Entidades
{
/// <summary>
/// Entidade Aluno
/// </summary>
public class Aluno
{
public int Id { get; set; }
public string Nome { get; set; }
public string Email { get; set; }
public string Telefone { get; set; }
public string Endereco { get; set; }
public int Genero { get; set; }
public bool Ativo { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using MDI_Escola.Entidades;
using System.Data.SqlClient;
using System.Data;
namespace MDI_Escola.Repositorios
{
public class AlunoRepositorio : RepositorioBase, IRepositorio<Aluno>
{
/// <summary>
/// Obter aluno : Recupera registro do aluno no banco e retorna o objeto aluno
/// </summary>
/// <param name="id">Codigo do aluno</param>
/// <returns>Entidade aluno</returns>
public Aluno Obter(int id)
{
//Define comando SQL
var comando = new SqlCommand
{
CommandText = "SELECT * FROM alunos WHERE id = @id"
};
//Define obj aluno como null
Aluno aluno = null;
try
{
//Cria objeto de conexao com o banco
using (comando.Connection = CriarConexao())
{
//Abre conexao com o banco
comando.Connection.Open();
//Passa paremetro para o comando SQL
comando.Parameters.Add(new SqlParameter("id", id));
//Executa comando SQL, para leitura dos registros
var reader = comando.ExecuteReader();
//Le o resultado, linha a linha
while (reader.Read())
{
//Carrega objeto aluno com os valores retornado do banco
aluno = new Aluno
{
Id = (int)reader["id"],
Nome = (string)reader["nome"],
Email = (string)reader["email"],
Telefone = (string)reader["telefone"],
Endereco = (string)reader["endereco"],
Ativo = (bool)reader["ativo"],
Genero = (int)reader["genero"]
};
}
//Libera os recursos de leitura
reader.Dispose();
}
}
catch (Exception ex)
{
throw new ArgumentException("Erro ao retornar aluno do banco. Msg: " + ex.Message);
}
finally
{
comando.Dispose();
}
return aluno;
}
/// <summary>
/// Inserir aluno: Insere um novo registro no banco na tabela de alunos
/// </summary>
/// <param name="entidade">Objeto aluno</param>
/// <returns>Sucesso da operação</returns>
public bool Inserir(Aluno entidade)
{
//Define comando SQL
var comando = new SqlCommand
{
CommandText = "INSERT INTO alunos " +
"VALUES(@nome,@email,@telefone,@endereco,@genero,@ativo)"
};
try
{
//Cria objeto de conexao com o banco
using (comando.Connection = CriarConexao())
{
//Abre a conexao com o banco
comando.Connection.Open();
//Definindo valores para os parametros do comando SQL
comando.Parameters.Add(new SqlParameter("nome", entidade.Nome));
comando.Parameters.Add(new SqlParameter("email", entidade.Email));
comando.Parameters.Add(new SqlParameter("telefone", entidade.Telefone));
comando.Parameters.Add(new SqlParameter("endereco", entidade.Endereco));
comando.Parameters.Add(new SqlParameter("genero", entidade.Genero));
comando.Parameters.Add(new SqlParameter("ativo", entidade.Ativo));
//Executa o comando
comando.ExecuteNonQuery();
//Retorna operaçao realizada com sucesso
return true;
}
}
catch (Exception ex)
{
//Dispara uma exceçao caso algum problema ocorra
throw new ArgumentException("Erro ao inserir. Msg:" + ex.Message);
}
finally
{
//Libera os recursos
comando.Dispose();
}
}
/// <summary>
/// Excluir aluno: Remove registro do aluno do banco
/// </summary>
/// <param name="id">Codigo do aluno</param>
/// <returns>Sucesso da operação</returns>
public bool Excluir(int id)
{
//Define comando SQL
var comando = new SqlCommand
{
CommandText = "DELETE FROM alunos WHERE id = @id"
};
try
{
//Cria objeto de conexao com o banco
using (comando.Connection = CriarConexao())
{
//Abre conexao com o banco
comando.Connection.Open();
//Adiciona os parametros do comando SQL
comando.Parameters.Add(new SqlParameter("id", id));
//Executa comando
comando.ExecuteNonQuery();
//Retorna operacao realizada com sucesso
return true;
}
}
catch (Exception ex)
{
//Dispara uma exceçao caso algum problema ocorra
throw new ArgumentException("Erro ao excluir aluno. Msg: " + ex.Message);
}
finally
{
//Libera os recursos
comando.Dispose();
}
}
/// <summary>
/// Atualizar aluno: Atualiza informações do aluno no banco
/// </summary>
/// <param name="entidade"></param>
/// <returns>Sucesso da operação</returns>
public bool Atualizar(Aluno entidade)
{
//Define o comando SQL
var comando = new SqlCommand
{
CommandText = "UPDATE alunos SET " +
"nome = @nome, " +
"email = @email, " +
"telefone = @telefone, " +
"endereco = @endereco, " +
"genero = @genero, " +
"ativo = @ativo, " +
"where id = @id "
};
try
{
//Cria objeto de conexao com o banco
using (comando.Connection = CriarConexao())
{
//Abre a conexao com o banco
comando.Connection.Open();
//Adiciona os parametros do comando SQL
comando.Parameters.Add(new SqlParameter("id", entidade.Id));
comando.Parameters.Add(new SqlParameter("nome", entidade.Nome));
comando.Parameters.Add(new SqlParameter("email", entidade.Email));
comando.Parameters.Add(new SqlParameter("telefone", entidade.Telefone));
comando.Parameters.Add(new SqlParameter("endereco", entidade.Endereco));
comando.Parameters.Add(new SqlParameter("genero", entidade.Genero));
comando.Parameters.Add(new SqlParameter("ativo", entidade.Ativo));
//Executa comaando
comando.ExecuteNonQuery();
//Retorna operacao realizada com sucesso
return true;
}
}
catch(Exception ex)
{
//Dispara uma exceçao caso uma problema ocorra
throw new ArgumentException("Erro ao executar comando no banco. Msg:" + ex.Message);
}
finally
{
comando.Dispose();
}
}
/// <summary>
/// Todos alunos: Recupera a lista total alunos do banco
/// </summary>
/// <returns>Lista com todos os alunos registrados</returns>
public List<Aluno> Todos()
{
//Define comando SQL
var comando = new SqlCommand
{
CommandText = "SELECT * FROM alunos"
};
//Cria um a lista vazia de alunos
var listaAlunos = new List<Aluno>();
//Cria um objeto de conexao com o banco
using (comando.Connection = CriarConexao())
{
//Abre conexao com o banco
comando.Connection.Open();
//Executa comando SQL, para leitura dos registros
var reader = comando.ExecuteReader();
//Carrega objeto aluno com os valores retornado do banco
while (reader.Read())
{
//Carrega objeto aluno com os valores retornado do banco
var alunodb = new Aluno
{
Id = (int)reader["id"],
Nome = (string)reader["nome"],
Email = (string)reader["email"],
Telefone = (string)reader["telefone"],
Endereco = (string)reader["endereco"],
Genero = (int)reader["genero"],
Ativo = (bool)reader["ativo"]
};
//Adiciona objeto aluno a lista
listaAlunos.Add(alunodb);
}
//Libera recursos
reader.Dispose();
comando.Dispose();
}
return listaAlunos;
}
/// <summary>
/// Verifica se o nome preenchido está disponível para cadastro
/// </summary>
/// <param name="nome">Nome do aluno</param>
/// <param name="id">Codigo do aluno</param>
/// <returns>Disponibilidade para cadastro</returns>
public bool VerificarNomeDisponivel(string nome, int id)
{
//Define o comando SQL
var comando = new SqlCommand
{
CommandText = "PR_VerificarNomeDisponivel",
CommandType = CommandType.StoredProcedure
};
try
{
//Cria obj de conexao com o banco
using (comando.Connection = CriarConexao())
{
//Abre conexao com o banco
comando.Connection.Open();
//Passa o parametro para a PROC
comando.Parameters.Add(new SqlParameter("NOME", nome));
comando.Parameters.Add(new SqlParameter("ID", id));
//Recupera a primeira coluna da primeira linha do resultado
//Nesse caso o id do aluno
var resultado = comando.ExecuteScalar();
//Retorna verdadeiro se nao existir um aluno com esse nome ja cadsrado
if (resultado == null)
return true;
else
return false;
}
}
catch (Exception ex)
{
//Dispara uma msg de erro, caso ocorra algum problema na execuçao do codigo
throw new ArgumentException("Erro ao verificar disponibilidade de nome. Msg:" + ex.Message);
}
finally
{
//Libera os recursos utilizados
comando.Dispose();
}
}
}
}
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="MDI_Escola"
connectionString="Data Source=NT-001;Initial Catalog=MDI_Escola;User ID=sa;Password=123"
providerName="System.Data.SqlClient"/>
</connectionStrings>
</configuration>
using System;
using System.Windows.Forms;
using MDI_Escola.Entidades;
using MDI_Escola.Repositorios;
namespace WindowsForms_MDI_Escola
{
public partial class FrmCadAluno : Form
{
#region Propriedades
//Repositorio de dados
private AlunoRepositorio _repositorioAluno;
#endregion
#region Metodos
public FrmCadAluno()
{
//Inicializa repositorio de dados
_repositorioAluno = new AlunoRepositorio();
InitializeComponent();
LimparCampos();
}
protected void LimparCampos()
{
//Limpa todos os campos textos
lblCodigo.Text =
txtNome.Text =
txtEmail.Text =
txtEndereco.Text =
txtTelefone.Text = string.Empty;
//Desmarca todos os campos de marcação e desativa botoes
rbFem.Checked =
rbMasc.Checked =
chkAtivo.Checked =
btnAlterar.Enabled =
btnCancelar.Enabled =
btnExcluir.Enabled = false;
btnSalvar.Enabled = true;
//Remove o auto gerador de colunas da datagridview
dataGridViewAlunos.AutoGenerateColumns = false;
//Recupera todos os alunos do banco
dataGridViewAlunos.DataSource = _repositorioAluno.Todos();
}
protected Aluno CarregarObjAluno(int id)
{
//Carrega obj ALuno com os valores preenchidos nos componnetes da tela
var aluno = new Aluno
{
Id = id,
Nome = txtNome.Text,
Email = txtEmail.Text,
Telefone = txtTelefone.Text,
Endereco = txtEndereco.Text,
Ativo = chkAtivo.Checked,
Genero = (rbMasc.Checked ? 0 : 1)
};
return aluno;
}
public void AlterarSituacaoBotao(int id, bool situacao)
{
//Ativa botoes Salvar e Alterar
//id = 0 -> Está inserindo um novo registro
if (id == 0)
btnSalvar.Enabled = situacao;
else
btnAlterar.Enabled = situacao;
}
#endregion
#region Eventos
private void btnSalvar_Click(object sender, System.EventArgs e)
{
//Carrega valores preenchidos nos componentes da tela para o obj Aluno
var aluno = CarregarObjAluno(0);
//Insere aluno :
//-------------- Retorno = true -> Exibe msg 1; Retorno = false -> Exibe msg 2;
MessageBox.Show(_repositorioAluno.Inserir(aluno)
? "Incluido com sucesso!"
: "Ocorreu um erro ao salvar! Tente novamente.");
LimparCampos();
}
private void dataGridViewAlunos_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
//Recupera o id referente ao registro selecionado
var id = int.Parse(dataGridViewAlunos.CurrentRow.Cells["Id"].Value.ToString());
try
{
//Recupera o aluno pelo id
var aluno = _repositorioAluno.Obter(id);
if (aluno == null)
{
MessageBox.Show("Aluno não encontrado");
return;
}
//Carrega componentes com os valores retornados do BD
lblCodigo.Text = aluno.Id.ToString();
txtNome.Text = aluno.Nome;
txtEmail.Text = aluno.Email;
txtEndereco.Text = aluno.Endereco;
txtTelefone.Text = aluno.Telefone;
chkAtivo.Checked = aluno.Ativo;
rbMasc.Checked = (aluno.Genero == 0);
rbFem.Checked = (aluno.Genero == 1);
btnSalvar.Enabled = false;
btnAlterar.Enabled = btnCancelar.Enabled = btnExcluir.Enabled = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void btnAlterar_Click(object sender, EventArgs e)
{
//Recupera o id do aluno selecionado
var id = int.Parse(lblCodigo.Text);
//Carrega o aluno
var aluno = CarregarObjAluno(id);
//Atualiza aluno :
//-------------- Retorno = true -> Exibe msg 1; Retorno = false -> Exibe msg 2;
MessageBox.Show(_repositorioAluno.Atualizar(aluno) ? "Iserido com sucesso!" : "Erro ao atulizar");
//Limpa campos da tela
LimparCampos();
}
private void btnCancelar_Click(object sender, EventArgs e)
{
//Limpa campos da tela
LimparCampos();
}
private void btnExcluir_Click(object sender, EventArgs e)
{
//Recupera codigo do aluno selecionado
var id = int.Parse(lblCodigo.Text);
//Exibe msg de confirmaçao e verifica se a opçao selecionada foi = 'sim'
if (MessageBox.Show("Deseja excluir?",
"Excluir",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question) == DialogResult.Yes)
{
//Caso seleciona sim, exclui aluno
_repositorioAluno.Excluir(id);
}
//Limpa campos da tela
LimparCampos();
}
private void txtNome_Leave(object sender, EventArgs e)
{
int id;
//Tenta converter para inteiro, se não der certo define o valor = 0
int.TryParse(lblCodigo.Text, out id);
//Verifica se o nome esta disponivel para cadastro
var disponivel = _repositorioAluno.VerificarNomeDisponivel(txtNome.Text, id);
//Exibe uma msg caso o nome nao esteja disponivel
lblMsg.Text = disponivel ? string.Empty : "Este nome não está disponível. Tente outro, por favor.";
//Libera ou Bloqueia botao, dependendo da disponibilidade
AlterarSituacaoBotao(id, disponivel);
}
#endregion
}
}
using System.Collections.Generic;
namespace MDI_Escola.Repositorios
{
/// <summary>
/// Interface para o Repositorio de dados : Define contratos que as classes repositórios deverão implementar
/// </summary>
/// <typeparam name="T">Classe entidade referente ao repositório implementado</typeparam>
public interface IRepositorio<T> where T : class
{
/// <summary>
/// Recuperar uma entidade do banco
/// </summary>
/// <param name="id">Código do registro no banco</param>
/// <returns>Entidade carregada com os valores do banco</returns>
T Obter(int id);
/// <summary>
/// Salvar um novo registro no banco
/// </summary>
/// <param name="entidade">Entidade com propriedades preenchidas, para ser inserida no banco</param>
/// <returns>Sucesso da operação</returns>
bool Inserir(T entidade);
/// <summary>
/// Remover registro do banco
/// </summary>
/// <param name="id">Código do registro no banco</param>
/// <returns>Sucesso da operação</returns>
bool Excluir(int id);
/// <summary>
/// Atualizar um registro no banco
/// </summary>
/// <param name="entidade">Entidade com propriedades preenchidas, para ser atualizada no banco</param>
/// <returns>Sucesso da operação</returns>
bool Atualizar(T entidade);
/// <summary>
/// Recuperar todos os registros da tabela no banco
/// </summary>
/// <returns>Lista de entidades referente a todos os registros encontrados na tabela no banco</returns>
List<T> Todos();
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Configuration;
namespace MDI_Escola.Repositorios
{
public abstract class RepositorioBase
{
/// <summary>
/// Cria um objeto de conexao com o banco
/// </summary>
/// <returns></returns>
protected SqlConnection CriarConexao()
{
return new SqlConnection
{
//Recupera a string de conexao com o banco
ConnectionString = ConfigurationManager.
ConnectionStrings["MDI_Escola"].
ConnectionString
};
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment