Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using Projeto3Camadas.Code.BLL;
- private void frmCadastroCliente_Load(object sender, EventArgs e)
- {
- CarregarGrid();
- }
- //EVENTO INSERIR E ATUALIZAR
- private void btnGravar_Click(object sender, EventArgs e)
- {
- //LOGICA QUE SE O ID DO CLIENTE FOR VAZIA, EFETUA A OPERAÇÃO DE INSERIR, SE NÃO EFETUA A AÇÃO DE ATUALIZAR
- dto.Nome = txtNome.Text;
- dto.Email = txtEmail.Text;
- if (txtId.Text == "")
- {
- bll.Inserir(dto);
- }
- else
- {
- dto.Id = int.Parse(txtId.Text);
- bll.Atualizar(dto);
- }
- CarregarGrid();
- }
- //CRIANDO UM METODO ESPESSIFICO PARA CARREGAR O GRID
- private void CarregarGrid()
- {
- gridClientes.DataSource = bll.SelecionarTodosClientes();
- }
- //AO CLICAR EM UM DETERMINADO CLIENTE, ELE VAI SELECIONAR E MOSTRAR NOS CAMPOS NA POSIÇÃO INDICADA:
- private void gridClientes_CellContentClick(object sender, DataGridViewCellEventArgs e)
- {
- txtId.Text = gridClientes.Rows[e.RowIndex].Cells[0].Value.ToString();
- txtNome.Text = gridClientes.Rows[e.RowIndex].Cells[1].Value.ToString();
- txtEmail.Text = gridClientes.Rows[e.RowIndex].Cells[2].Value.ToString();
- }
- }
- using System;
- //Dados da conexao
- private string server = "localhost";
- private string user = "root";
- private string password = "";
- private string database = "dbclientes";
- //CONECTAR
- public void Conectar()
- {
- //Se a conexao estiver aberta, eu fecho ela antes de abrir uma nova conexão
- if (conn != null)
- {
- conn.Close();
- }
- //Guarda os dados da string de conexao
- string connStr = $"server = {server}; user = {user}; password = {password}; database = {database}; pooling = false";
- //string connStr = String.Format("server={0};user id={1}; password={2}; database={3}; pooling=false", server, user, password, database);
- //Tratamento de exceção
- try
- {
- //Concretiza o objeto conn para conexao e passa por parametro a string de conexao connStr
- conn = new MySqlConnection(connStr);
- conn.Open();
- }
- catch (MySqlException ex)
- {
- throw new Exception(ex.Message);
- }
- }
- //EXECUTAR COMANDO SQL
- public void ExecutarcomandoSql(string comandoSql)
- {
- //Executa o comando passando por parametro a string digitada no comando sql
- MySqlCommand comando = new MySqlCommand(comandoSql, conn);
- comando.ExecuteNonQuery();
- conn.Close();
- }
- //EXECUTAR LEITURA PREENCHE A TABALE E RETORNAR
- public DataTable RetDataTable(string sql)
- {
- //Retorno de um objeto Aqui so pode comando select
- //Concretisa o objeto data e da, em da é passado o sql e a conexao
- data = new DataTable();
- da = new MySqlDataAdapter(sql, conn);
- //Preenche o objeto "da" com os daddos que estao no datatable "data"
- da.Fill(data);
- //Retorna o objeto "data" já preenchido
- return data;
- }
- //EXECUTAR E RETORNAR OS DADOS SELECIONADOS
- public MySqlDataReader RetDataReader(string sql)
- {
- //Retorna o objeto "MySqlDataReader" dado de um comando SELCET
- //concretisa a criação do objeto "comando"
- MySqlCommand comando = new MySqlCommand(sql, conn);
- //Objeto comando criado, basta executa-lo de modeo que ele retorne um objeto do tipo MySqlDataReader
- MySqlDataReader dr = comando.ExecuteReader();
- //Retorna o objeto dr ja preenchido
- return dr;
- }
- }
- using System;
- public int Id { get => id; set => id = value; }
- public string Nome { get => nome; set => nome = value; }
- public string Email { get => email; set => email = value; }
- }
- using Projeto3Camadas.Code.DTO;
- AcessoBancoDados bd = new AcessoBancoDados();
- public void Inserir(ClienteDTO dto)
- {
- //tratamento de erro para passar uma mensagem elegante para o usuario de modo que ele tenha ao menos a possibilidade de tentar resolver o erro ou ate mesmo ajudar o suporte a desvendafr o possivel errro
- try
- {
- //Tratando de um possivel erro do usuario passar um nome com o uso de uma apostrofe ' pois o banco de dados pode confundir
- string nome = dto.Nome.Replace("'", "''");
- //concretizando a instanciação do objeto, pois esse processo e matado no finally, sendo assim ao cadastrar dois usuarios ou mais simultaneamente, enfrentariamos um erro de objeto nao encontrado ou nao instanciado
- bd = new AcessoBancoDados();
- bd.Conectar();
- string comando = "INSERT INTO cliente(nome, email) VALUES('" + nome + "', '" + dto.Email + "')";
- bd.ExecutarcomandoSql(comando);
- }
- catch (Exception ex)//essa variavel recebe detalhes do erro
- {
- //nesse caso irá aparecer para o usuario um mensagem mais elegante e descritiva sobre o erro, seguida dos detalhes tecnicos.
- throw new Exception( "Erro ao tentar inserir um usuario: DECRIÇÃO DO ERRO => " + ex.Message);
- }
- //Esse bloco sempre sera executado, dando ou nao dando erro.
- finally
- {
- //nesse caso e bem espessifico o seu uso, pois vai depender de cada aplicão, nesse caso estamos matando o processo do objeto db
- //um detalhe e que ao inserir um novo usuario de forma simuntanea, enfrentaremos um novo erro, pois o objeto bd nao esta instanciado.
- //SOLUÇÃO - INSTANCIAR DENTRO DO BLOCO CACTH CONCRETIZANDO
- bd = null;
- }
- }
- public void Atualizar(ClienteDTO dto)
- {
- try
- {
- string nome = dto.Nome.Replace("'", "''");
- bd = new AcessoBancoDados();
- bd.Conectar();
- string comando = "UPDATE cliente SET nome = '" + dto.Nome + "', SET email = '" + dto.Email + "' WHERE id = " + dto.Id;
- bd.ExecutarcomandoSql(comando);
- }
- catch (MySqlException ex)
- {
- throw new Exception("Erro ao tentar gravar usuario na banco de dados. DETALHES TECNICOS => " + ex.Message);
- }
- finally
- {
- bd = null;
- }
- }
- public DataTable SelecionarTodosClientes()
- {
- DataTable dt = new DataTable();
- try
- {
- bd = new AcessoBancoDados();
- bd.Conectar();
- dt = bd.RetDataTable("SELECT * FROM cliente ORDER BY id DESC");
- }
- catch (Exception ex )
- {
- throw new Exception("Ero ao selecionar os usuarios no banco de dados. DETALHES TECNICO DO ERRO:" + ex.Message);
- }
- finally
- {
- }
- return dt;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement