Object Relational Mapping - Alterar e Excluir

Nesta aula iremos aprender como alterar o nosso ORM para fazer alterações e exclusões de forma genérica.

assinaturaAssine nossa Comunidade

Object Relational Mapping - Alterar e Excluir

Nesta aula vamos trazer os dados dos Usuarios no banco de dados através do ORM.

Para isso iremos inserir o componente DataGridView no formulário.

A propriedade name será chamada de dgUsuarios.

  1. Mostrar todos os Usuários no DataGridView

  2. No evento Load do formulário iremos preencher a propriedade DataSource do dgUsuario com todos os Usuarios.

            
    
              namespace TresCamadas
              {
                public partial class Form1 : 
                  {
    
                    public Form1()
                    {
                      InitializeComponenent()
                    }
    
                    Private void Form1_Load(object sender, EventsArgs e )
                    {
                      loadAll()
                    }
    
                    private void loadAll()
                    {
                      dgUsuarios.DataSource = new Usuario().Todos();
                    }
                    
                  }
              }
             
          
  3. Criar método Todos() na classe Usuario através da Classe Base

  4. Na classe Usuario vamos criar um novo método Todos() com a palavra new.

    Este novo método irá buscar todos os campos da tabela Usuarios através do método Todos() da classe Base.

            
    
              namespace Database
              {
                public class Usuario : Base
                {
                  [OpcoesBase (UsarNoBancoDeDados = true)]
                  public string Nome {get;set}
    
                  [OpcoesBase (UsarNoBancoDeDados = true)]
                  public string Telefone {get;set}
    
                  [OpcoesBase (UsarNoBancoDeDados = true, chavePrimaria = true, UsarParaBuscar = true)]
                  public string CPF {get;set;}
    
                }
    
                public new List< Usuario> Todos()
                {
                  var usuarios = new List< Usuario>();
                  foreach (var ibase in base.Todos())
                  {
                    usuarios.Add((Usuario)ibase);
                  }
                  return usuarios;
                }
              }
             
          
  5. Carregar Usuario em TextBox ao executar duplo clique em uma linha do DataGridView

  6. Vamos utilizar o evento CellDoubleClick do DataGridView para obter a linha do Usuario que desejamos alterar.

    Mudar a propriedade Text do componente button para Alterar.

            
    
              namespace TresCamadas
              {
                public partial class Form1 : 
                  {
    
                    public Form1()
                    {
                      InitializeComponenent()
                    }
             
                    private void dgUsuarios_CellDoubleClick(object sender, DataGridViewEventArgs e)
                    {
                      Usuario usuario = ((Usuario)dgUsuarios.Rows[e.RowIndex].DataBoundItem);
                      TxtNome.Text = usuario.Nome;
                      TxtTelefone.Text = usuario.Telefone;
                      TxtCPF.Text = usuario.CPF;
                      txtId.Text  = usuario.Id.ToString();
                      btnGravar.Text = "Alterar";
                    }
                    
                  }
              }
             
          
  7. Criar método LimparCampos()

  8. Criar método LimparCampos() para limpar os campos de todos os textBox.

            
    
              namespace TresCamadas
              {
                public partial class Form1 : 
                  {
    
                    public Form1()
                    {
                      InitializeComponenent()
                    }
             
                    private void limparCampos()
                    {
                      TxtNome.Text = string.Empty;
                      TxtTelefone.Text = string.Empty;
                      TxtCPF.Text = string.Empty;
                      TxtId.Text = string.Empty;
                      btnGravar.Text = "Gravar";
                    }
                    
                    
                  }
              }
             
          
  9. Chamar o método Salvar() no button Gravar()

  10. Agora podemos alterar os campos que estão nos TextBox e gravá-los no banco de dados, através do método Salvar() da instância de usuario.

            
    
              namespace TresCamadas
              {
                public partial class Form1 : 
    { public Form1() { InitializeComponenent() } private void Gravar() { Usuario usuario = new Usuario(); if (txtId.text !="") { usuario.Id = int.Parse(txtId.Tetx); } usuario.Nome = TxtNome.Text; usuario.Telefone = TxtTelefone.Text; usuario.CPF = TxtCPF.Text; usuario.Salvar(); limparCampos(); loadAll() MessageBox.Show ("Usuario salvo com sucesso"); } } }
  11. Criar campo id na tabela Usuario para alterar um determinado usuário.

  12. Vamos fazer uma mudança na tabela de Usuario, criando o campo id par verificar se o id já existe na tabela e assim poder fazer alteração.

    Para isso, criaremos o campo id e vamos definí-lo como auto incremento no SQL Server através do comando:

    alter table usuarios add int identity

    O Campo id , do tipo int, será o novo Key na classe Usuario, definindo chavePrimaria = true

    Vamos retirar chavePrimaria = true do campo CPF, como mostra o código abaixo:

            
    
              namespace Database
              {
                public class Usuario : Base
                  {
    
                    [OpcoesBase (UsarNoBancoDeDados = true, chavePrimaria = true, UsarParaBuscar = true)]
                    public int id {get;set;}
    
                    [OpcoesBase (UsarNoBancoDeDados = true)]
                    public string Nome {get;set}
    
                    [OpcoesBase (UsarNoBancoDeDados = true)]
                    public string Telefone {get;set}
                  
                    [OpcoesBase (UsarNoBancoDeDados = true,  UsarParaBuscar = true)]
                    public string CPF {get;set;}
    
                  }
              }
             
           
  13. Organizar as colunas no DataGridView de forma customizada.

  14. Para organizar as colunas do DataGridView de uma maneira que nós queremos que sejam mostrados no grid, vamos utilizar uma propriedade do DataGridView chamada AutoGenerateColums = false, no evento Load do formulário.

    Assim iremos inserir as colunas manualmente, na ordem que se deseja.

            
    
              namespace TresCamadas
              {
                public partial class Form1 : 
                  {
    
                    public Form1()
                    {
                      InitializeComponenent()
                    }
    
                    Private void Form1_Load(object sender, EventsArgs e )
                    {
                      loadAll()
                    }
    
                    private void loadAll()
                    {
                      dgUsuarios.AutoGenerateColums = false;
                      dgUsuarios.DataSource = new Usuario().Todos();
                    }
                    
                  }
              }
             
          

    Para inserir as colunas manualmente:

    • Clicar no canto superior direito do DataGridView;
    • No menu , clicar em Editar Colunas;
    • Clicar no botão Add;
    • Digitar o Nome das colunas em Name e Header text ;
    • Após adicionar todas as colunas, clicar em close;
    • Clicar novamente no menu Editar colunas;
    • Selecionar cada coluna criada e alterar a propridade DataPropertyName e Name, que será a coluna no banco de dados;
  15. Alterar a propriedade Key para tipo int

  16.         
              using System.Reflexion;
      
              namespace Database
              {
                public class Base : IBase
                  {
              
                    private string connectionString = ConfigurationManager,AppSettings["SqlConnection"];
      
                    public int Key 
                    {
                      get 
                      {
                        foreach(PropertyInfo pi in this.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
                        {
                          OpcoesBase pOpcoesBase = (OpcoesBase)pi.GetCustomAttribute(typeof(OpcoesBase))
                          if (pOpcoesBase != null && pOpcoesBase.ChavePrimaria)
                          {
                            return Convert.ToInt32(pi.GetValue(this));
                          }
                        }
                        return 0;
                      }
                    }
                   
                  }
              }
             
          
  17. Alterar a propriedade Key da Interface IBase para int

  18.        
             namespace Database
             {
               public Interface IBase
                 {
                   int Key {get;}
                   void Salvar();
                   List< IBase> Todos();
                   List< IBase> Busca();
               }
             }
            
          
  19. No método salvar, verificar se a Key está preenchida para fazer alteração

  20.         
              using System.Reflexion;
      
              namespace Database
              {
                public class Base : IBase
                  {
        
                    public virtual void Salvar()
                    {
                      using (SqlConnection connection = new SqlConnection(connectionstring))
                      {
                        List< string > campos = new List< string >();
                        List< string > valores = new List< string >();
      
                        foreach(PropertyInfo pi in this.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
                        {
                          OpcoesBase pOpcoesBase = (OpcoesBase)pi.GetCustomAttribute(typeof(OpcoesBase))
                          if (pOpcoesBase != null && pOpcoesBase.UsarNoBancoDeDados)
                          {
                            if(this.key == 0)
                            {
                              if (!pOpcoesBase.ChavePrimaria)
                              {
                                campos.Add(pi.Nome);
                                valores.Add("'" + pi.GetValue(this) + "'");
                              }
                            }
                            else 
                            {
                              if (!pOpcoesBase.ChavePrimaria)
                              {
                                valores.Add(" " + pi.Name + " = '" + pi.GetValue(this) + "'");
                              }
                            }
                          }
                        }
                        if(this.key == 0)
                        {
                          string queryString = "insert into " + this.GetType().Name + "s (" + string.Join(", ",campos.ToArray())+ ")
                                  values(" + string.Join(", ",valores.ToArray())
                        }
                        else 
                        {
                          if (!pOpcoesBase.ChavePrimaria)
                          {
                            string queryString = "update" + this.GetType().Name + "s  set (" + string.Join(", ",valores.ToArray()) 
                            + " where id = " + this.key +";"
                          }
                        }         
                        SqlCommand command = new SqlCommand(queryString, connection);
                        command.Connection.Open();
                        command.ExecuteNonQuery();
      
                      }
                    }
                  }
              }
             
           
  21. Criar button para excluir um registro

  22. Vamos criar um botão para excluir um registro, chamado btnExcluir

            
    
              namespace TresCamadas
              {
                public partial class Form1 : 
                  {
    
                    public Form1()
                    {
                      InitializeComponenent()
                    }
             
                    private void btnExcluir_Click(object sender, EventArgs e)
                    {
                       var retorno = MessageBox.Show("Tem certeza que deseja excluir?","Excluir",MessageBoxButtons.YesNo, MessageBoxIcon.QUestion );
                       if (retorno.Equals(DialogResult.Yes))
                       {
                        foreach(var DataGridViewRow in dgUsuarios.SelectedRows)
                        {
                            Usuario usuario = ((Usuario)dgUsuarios.Rows[cell.RowIndex].DataBoundItem);
                            usuario.Excluir(); 
                        }
                        foreach(var DataGridViewRow in dgUsuarios.SelectedRows)
                        {
                            Usuario usuario = ((Usuario)row.DataBoundItem);
                            usuario.Excluir = 
                        }
                       }
                       loadAll();
                    }
                  }
              }
             
          
  23. Criar o método Excluir

  24.        
             using System.Reflexion;
     
             namespace Database
             {
               public class Base : IBase
                 {
       
                   public virtual void Excluir()
                   {
                     using (SqlConnection connection = new SqlConnection(connectionstring))
                     {
                       foreach(PropertyInfo pi in this.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
                       {
                  
                       string queryString = "delete from " + this.GetType().Name + "s  " 
                        + " where id = " + this.key +";"
                      }         
                       SqlCommand command = new SqlCommand(queryString, connection);
                       command.Connection.Open();
                       command.ExecuteNonQuery();
     
                     }
                   }
                 }
             }
            
          

Object Relational Mapping - Alterar e Excluir

Nesta aula iremos aprender como alterar o nosso ORM para fazer alterações e exclusões de forma genérica.

Próximas Aulas:
assinaturaAssine nossa Comunidade

Object Relational Mapping - Alterar e Excluir

Nesta aula vamos trazer os dados dos Usuarios no banco de dados através do ORM.

Para isso iremos inserir o componente DataGridView no formulário.

A propriedade name será chamada de dgUsuarios.

  1. Mostrar todos os Usuários no DataGridView

  2. No evento Load do formulário iremos preencher a propriedade DataSource do dgUsuario com todos os Usuarios.

            
    
              namespace TresCamadas
              {
                public partial class Form1 : 
                  {
    
                    public Form1()
                    {
                      InitializeComponenent()
                    }
    
                    Private void Form1_Load(object sender, EventsArgs e )
                    {
                      loadAll()
                    }
    
                    private void loadAll()
                    {
                      dgUsuarios.DataSource = new Usuario().Todos();
                    }
                    
                  }
              }
             
          
  3. Criar método Todos() na classe Usuario através da Classe Base

  4. Na classe Usuario vamos criar um novo método Todos() com a palavra new.

    Este novo método irá buscar todos os campos da tabela Usuarios através do método Todos() da classe Base.

            
    
              namespace Database
              {
                public class Usuario : Base
                {
                  [OpcoesBase (UsarNoBancoDeDados = true)]
                  public string Nome {get;set}
    
                  [OpcoesBase (UsarNoBancoDeDados = true)]
                  public string Telefone {get;set}
    
                  [OpcoesBase (UsarNoBancoDeDados = true, chavePrimaria = true, UsarParaBuscar = true)]
                  public string CPF {get;set;}
    
                }
    
                public new List< Usuario> Todos()
                {
                  var usuarios = new List< Usuario>();
                  foreach (var ibase in base.Todos())
                  {
                    usuarios.Add((Usuario)ibase);
                  }
                  return usuarios;
                }
              }
             
          
  5. Carregar Usuario em TextBox ao executar duplo clique em uma linha do DataGridView

  6. Vamos utilizar o evento CellDoubleClick do DataGridView para obter a linha do Usuario que desejamos alterar.

    Mudar a propriedade Text do componente button para Alterar.

            
    
              namespace TresCamadas
              {
                public partial class Form1 : 
                  {
    
                    public Form1()
                    {
                      InitializeComponenent()
                    }
             
                    private void dgUsuarios_CellDoubleClick(object sender, DataGridViewEventArgs e)
                    {
                      Usuario usuario = ((Usuario)dgUsuarios.Rows[e.RowIndex].DataBoundItem);
                      TxtNome.Text = usuario.Nome;
                      TxtTelefone.Text = usuario.Telefone;
                      TxtCPF.Text = usuario.CPF;
                      txtId.Text  = usuario.Id.ToString();
                      btnGravar.Text = "Alterar";
                    }
                    
                  }
              }
             
          
  7. Criar método LimparCampos()

  8. Criar método LimparCampos() para limpar os campos de todos os textBox.

            
    
              namespace TresCamadas
              {
                public partial class Form1 : 
                  {
    
                    public Form1()
                    {
                      InitializeComponenent()
                    }
             
                    private void limparCampos()
                    {
                      TxtNome.Text = string.Empty;
                      TxtTelefone.Text = string.Empty;
                      TxtCPF.Text = string.Empty;
                      TxtId.Text = string.Empty;
                      btnGravar.Text = "Gravar";
                    }
                    
                    
                  }
              }
             
          
  9. Chamar o método Salvar() no button Gravar()

  10. Agora podemos alterar os campos que estão nos TextBox e gravá-los no banco de dados, através do método Salvar() da instância de usuario.

            
    
              namespace TresCamadas
              {
                public partial class Form1 : 
    { public Form1() { InitializeComponenent() } private void Gravar() { Usuario usuario = new Usuario(); if (txtId.text !="") { usuario.Id = int.Parse(txtId.Tetx); } usuario.Nome = TxtNome.Text; usuario.Telefone = TxtTelefone.Text; usuario.CPF = TxtCPF.Text; usuario.Salvar(); limparCampos(); loadAll() MessageBox.Show ("Usuario salvo com sucesso"); } } }
  11. Criar campo id na tabela Usuario para alterar um determinado usuário.

  12. Vamos fazer uma mudança na tabela de Usuario, criando o campo id par verificar se o id já existe na tabela e assim poder fazer alteração.

    Para isso, criaremos o campo id e vamos definí-lo como auto incremento no SQL Server através do comando:

    alter table usuarios add int identity

    O Campo id , do tipo int, será o novo Key na classe Usuario, definindo chavePrimaria = true

    Vamos retirar chavePrimaria = true do campo CPF, como mostra o código abaixo:

            
    
              namespace Database
              {
                public class Usuario : Base
                  {
    
                    [OpcoesBase (UsarNoBancoDeDados = true, chavePrimaria = true, UsarParaBuscar = true)]
                    public int id {get;set;}
    
                    [OpcoesBase (UsarNoBancoDeDados = true)]
                    public string Nome {get;set}
    
                    [OpcoesBase (UsarNoBancoDeDados = true)]
                    public string Telefone {get;set}
                  
                    [OpcoesBase (UsarNoBancoDeDados = true,  UsarParaBuscar = true)]
                    public string CPF {get;set;}
    
                  }
              }
             
           
  13. Organizar as colunas no DataGridView de forma customizada.

  14. Para organizar as colunas do DataGridView de uma maneira que nós queremos que sejam mostrados no grid, vamos utilizar uma propriedade do DataGridView chamada AutoGenerateColums = false, no evento Load do formulário.

    Assim iremos inserir as colunas manualmente, na ordem que se deseja.

            
    
              namespace TresCamadas
              {
                public partial class Form1 : 
                  {
    
                    public Form1()
                    {
                      InitializeComponenent()
                    }
    
                    Private void Form1_Load(object sender, EventsArgs e )
                    {
                      loadAll()
                    }
    
                    private void loadAll()
                    {
                      dgUsuarios.AutoGenerateColums = false;
                      dgUsuarios.DataSource = new Usuario().Todos();
                    }
                    
                  }
              }
             
          

    Para inserir as colunas manualmente:

    • Clicar no canto superior direito do DataGridView;
    • No menu , clicar em Editar Colunas;
    • Clicar no botão Add;
    • Digitar o Nome das colunas em Name e Header text ;
    • Após adicionar todas as colunas, clicar em close;
    • Clicar novamente no menu Editar colunas;
    • Selecionar cada coluna criada e alterar a propridade DataPropertyName e Name, que será a coluna no banco de dados;
  15. Alterar a propriedade Key para tipo int

  16.         
              using System.Reflexion;
      
              namespace Database
              {
                public class Base : IBase
                  {
              
                    private string connectionString = ConfigurationManager,AppSettings["SqlConnection"];
      
                    public int Key 
                    {
                      get 
                      {
                        foreach(PropertyInfo pi in this.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
                        {
                          OpcoesBase pOpcoesBase = (OpcoesBase)pi.GetCustomAttribute(typeof(OpcoesBase))
                          if (pOpcoesBase != null && pOpcoesBase.ChavePrimaria)
                          {
                            return Convert.ToInt32(pi.GetValue(this));
                          }
                        }
                        return 0;
                      }
                    }
                   
                  }
              }
             
          
  17. Alterar a propriedade Key da Interface IBase para int

  18.        
             namespace Database
             {
               public Interface IBase
                 {
                   int Key {get;}
                   void Salvar();
                   List< IBase> Todos();
                   List< IBase> Busca();
               }
             }
            
          
  19. No método salvar, verificar se a Key está preenchida para fazer alteração

  20.         
              using System.Reflexion;
      
              namespace Database
              {
                public class Base : IBase
                  {
        
                    public virtual void Salvar()
                    {
                      using (SqlConnection connection = new SqlConnection(connectionstring))
                      {
                        List< string > campos = new List< string >();
                        List< string > valores = new List< string >();
      
                        foreach(PropertyInfo pi in this.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
                        {
                          OpcoesBase pOpcoesBase = (OpcoesBase)pi.GetCustomAttribute(typeof(OpcoesBase))
                          if (pOpcoesBase != null && pOpcoesBase.UsarNoBancoDeDados)
                          {
                            if(this.key == 0)
                            {
                              if (!pOpcoesBase.ChavePrimaria)
                              {
                                campos.Add(pi.Nome);
                                valores.Add("'" + pi.GetValue(this) + "'");
                              }
                            }
                            else 
                            {
                              if (!pOpcoesBase.ChavePrimaria)
                              {
                                valores.Add(" " + pi.Name + " = '" + pi.GetValue(this) + "'");
                              }
                            }
                          }
                        }
                        if(this.key == 0)
                        {
                          string queryString = "insert into " + this.GetType().Name + "s (" + string.Join(", ",campos.ToArray())+ ")
                                  values(" + string.Join(", ",valores.ToArray())
                        }
                        else 
                        {
                          if (!pOpcoesBase.ChavePrimaria)
                          {
                            string queryString = "update" + this.GetType().Name + "s  set (" + string.Join(", ",valores.ToArray()) 
                            + " where id = " + this.key +";"
                          }
                        }         
                        SqlCommand command = new SqlCommand(queryString, connection);
                        command.Connection.Open();
                        command.ExecuteNonQuery();
      
                      }
                    }
                  }
              }
             
           
  21. Criar button para excluir um registro

  22. Vamos criar um botão para excluir um registro, chamado btnExcluir

            
    
              namespace TresCamadas
              {
                public partial class Form1 : 
                  {
    
                    public Form1()
                    {
                      InitializeComponenent()
                    }
             
                    private void btnExcluir_Click(object sender, EventArgs e)
                    {
                       var retorno = MessageBox.Show("Tem certeza que deseja excluir?","Excluir",MessageBoxButtons.YesNo, MessageBoxIcon.QUestion );
                       if (retorno.Equals(DialogResult.Yes))
                       {
                        foreach(var DataGridViewRow in dgUsuarios.SelectedRows)
                        {
                            Usuario usuario = ((Usuario)dgUsuarios.Rows[cell.RowIndex].DataBoundItem);
                            usuario.Excluir(); 
                        }
                        foreach(var DataGridViewRow in dgUsuarios.SelectedRows)
                        {
                            Usuario usuario = ((Usuario)row.DataBoundItem);
                            usuario.Excluir = 
                        }
                       }
                       loadAll();
                    }
                  }
              }
             
          
  23. Criar o método Excluir

  24.        
             using System.Reflexion;
     
             namespace Database
             {
               public class Base : IBase
                 {
       
                   public virtual void Excluir()
                   {
                     using (SqlConnection connection = new SqlConnection(connectionstring))
                     {
                       foreach(PropertyInfo pi in this.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
                       {
                  
                       string queryString = "delete from " + this.GetType().Name + "s  " 
                        + " where id = " + this.key +";"
                      }         
                       SqlCommand command = new SqlCommand(queryString, connection);
                       command.Connection.Open();
                       command.ExecuteNonQuery();
     
                     }
                   }
                 }
             }