none
Gravar dados utilizando 3 camadas RRS feed

  • Pergunta

  • Olá a todos.

     

    Estou tentando inserir dados no meu banco. 

    Peguei alguns exemplos na internet, porém as explicações são todas sem trabalhar em 3 camadas.

    Estou meio perdido, e não sei como trabalhar.

     

    Segue o que fiz até o momento:

    UI:
    
     private string Usuario()
    
        {
    
          string usuario = usuarioTextBox1.Text;
    
          return usuario;
    
        }
    
    
    
    BLL:
    
    public void GuardaUsuario()
    
        {
    
          classeDAL dal = new classeDAL();
    
          dal.GravaUsuario("insert into clientes(nome)  Values(@nome)");
    
        }
    
    
    DAL:
    
    
     public void GravaUsuario(string sql)
    
        {
    
          SqlConnection cn = new SqlConnection(strConexao); 
    
          
    
           
    
          SqlCommand cmd = new SqlCommand(sql, cn);
    
          cmd.Parameters.Add(new SqlParameter("@nome",/*NOME DO TEXTBOX QUE NAO SEI COMO COLOCAR*/);
    
    
    
          cn.Open();
    
          cmd.ExecuteNonQuery();
    
          cn.Close();
    
    
    
    
    
        }
    
    
    
    
    
    
    
    <span style="font-weight:bold; font-style:italic; text-decoration:underline">
    </span>
    

    Desde já. Agradeço!

     

     

    quinta-feira, 17 de fevereiro de 2011 19:40

Respostas

  • Olá Phellipe,

    Eu aconselho que você cria mais uma camada para persistir os dados, tipo uma representação das entidades que deseja manipular. Algo deste tipo:

    Entidades:

      public class Usuario
      {
       public Int32 idUsuario{ get; set; }
       public String nomeUsuario{ get; set; }
      }

    UI:

    private string Usuario()

        {
            Usuario objUsuario = new Usuario();

            objUsuario.nomeUsuario = usuarioTextBox1.Text;

            UsuarioBLL usuario = new UsuarioBLL().GuardaUsuario(objUsuario);      

        }

    BLL:

    public void GuardaUsuario(Usuario objUsuario)

        {

          classeDAL dal = new classeDAL();

          dal.GravaUsuario(objUsuario);

        }


    DAL:


    public void GravaUsuario(Usuario objUsuario)

        {

          SqlConnection cn = new SqlConnection(strConexao); 

          
          SqlCommand cmd = new SqlCommand(sql, cn);

          cmd.Parameters.Add(new SqlParameter("@nome", objUsuario.nomeUsuario); //ACREDITO QUE AQUI RESPONDI SUA DUVIDA :-)

          cn.Open();

          cmd.ExecuteNonQuery();

          cn.Close();

        }

    Espero ter ajuadado, ao menos um pouco!

    PS: Se o post foi util, classifique-o como resposta! ;-)


    Carlos Monteiro
    MCP ASP.Net C#
    twitter: @carloshkd
    http://www.wx7.com.br
    quinta-feira, 17 de fevereiro de 2011 21:15
  • Olá Senhores, tudo bem ?

    Acredito que a estrutura em camadas que o Phellipe esta utilizando talvez não seja o MVC e sim a "tradicional", com a BE/BO (Bussiness Entities/Business Objects), BLL(Business Logic Layer) e DAL (Data Access Layer).

    Caso seja esta a estrutura utilizada por você Phellipe, sugiro a leitura do seguinte artigo(dividido em 3 partes), para entendimento do conceito a estrutura e utilização dos métodos de 3 camadas.

    A versão utilizada neste artigo é o .NET 2.0, mas o conceito de camadas esta muito bem explicado, e pode ser entendido facilmente (aprendi e entendi claramente através destes artigos a aplicação do conceito POO em .NET). Claro que com os frameworks mais recentes (3.5 / 4.0), tecnicamente o código do artigo pode ser melhorado, mas o conceito continua praticamente o mesmo.

    Seguem os link's:

    Building Layered Web Applications with Microsoft ASP.NET 2.0 - Part 1
    http://imar.spaanjaars.com/416/building-layered-web-applications-with-microsoft-aspnet-20-part-1

    Building Layered Web Applications with Microsoft ASP.NET 2.0 - Part 2
    http://imar.spaanjaars.com/419/building-layered-web-applications-with-microsoft-aspnet-20-part-2

    Building Layered Web Applications with Microsoft ASP.NET 2.0 - Part 3
    http://imar.spaanjaars.com/420/building-layered-web-applications-with-microsoft-aspnet-20-part-3

    Agora caso seja o MVC mesmo, o link que o Bruno Seixas passou e a explicação do Thiago C. Maia estão excelentes.

    []'s

    Michel Zerbinatti

    terça-feira, 22 de fevereiro de 2011 15:21

Todas as Respostas

  • Olá Phellipe,

    Eu aconselho que você cria mais uma camada para persistir os dados, tipo uma representação das entidades que deseja manipular. Algo deste tipo:

    Entidades:

      public class Usuario
      {
       public Int32 idUsuario{ get; set; }
       public String nomeUsuario{ get; set; }
      }

    UI:

    private string Usuario()

        {
            Usuario objUsuario = new Usuario();

            objUsuario.nomeUsuario = usuarioTextBox1.Text;

            UsuarioBLL usuario = new UsuarioBLL().GuardaUsuario(objUsuario);      

        }

    BLL:

    public void GuardaUsuario(Usuario objUsuario)

        {

          classeDAL dal = new classeDAL();

          dal.GravaUsuario(objUsuario);

        }


    DAL:


    public void GravaUsuario(Usuario objUsuario)

        {

          SqlConnection cn = new SqlConnection(strConexao); 

          
          SqlCommand cmd = new SqlCommand(sql, cn);

          cmd.Parameters.Add(new SqlParameter("@nome", objUsuario.nomeUsuario); //ACREDITO QUE AQUI RESPONDI SUA DUVIDA :-)

          cn.Open();

          cmd.ExecuteNonQuery();

          cn.Close();

        }

    Espero ter ajuadado, ao menos um pouco!

    PS: Se o post foi util, classifique-o como resposta! ;-)


    Carlos Monteiro
    MCP ASP.Net C#
    twitter: @carloshkd
    http://www.wx7.com.br
    quinta-feira, 17 de fevereiro de 2011 21:15
  • Olá Carlos...

    Ainda não testei, mas pelo que vi, você criou uma MODEL. Para a movimentação dos dados.

    Creio que dará certo.

    Vou testar, e assim que terminar aviso se tudo ocorreu bem.

     

     

    Muito Obrigado!

    quinta-feira, 17 de fevereiro de 2011 21:19
  • Carlos, onde você esta colocando o codigo SQL para adicionar ao banco?

     

    Pelo q percebi na DAL vc colocou o nome do usuario no " @nome"

    cmd.Parameters.Add(new SqlParameter("@nome", objUsuario.nomeUsuario); //ACREDITO QUE AQUI RESPONDI SUA DUVIDA :-)//

     

    Mas não consegui visualizar onde você esta mandando o valor @nome pro banco.

     

     E no caso onde você esta passando o objUsuario.nomeUsuario, ---- ("@nome", objUsuario.nomeUsuario)-----

     eu não consigo chamar o nomeUsuario.

     

     

    Claudio

    quinta-feira, 17 de fevereiro de 2011 23:27
  • Phellipe, eu trabalho com MVC desde quando inicei minha vida profissional como desenvolvedor lá no Delphi, aprimorei meu MVC no Java onde me tornei analista de sistemas e hoje estou feliz no C# já com duas pós-graduações.

    Tentarei te explicar de forma bem resumida, porém objetiva.

    1º - A classe que o Carlos te sugeriu criar (que realmente deve existir), na verdade é a classe VO (Value Object).

    2º - Não entendi porque "DAL". O que eu conheço é "DAO" com "O". Que significa: "Data Access Object".

    3º - Este seu BLL esta parecendo ser a classe de controle. É nela que devem ficar também as regras de negócios.

    Muito bem. Para cada tabela no seu banco, vc terá no mínimo 3 classes na sua aplicação. Um VO, um DAO e um Controle.

    A classe VO:

    Esta classe possui os atributos da sua tabela (que lá no banco são as colunas da tabela).

    A classe DAO:

    É nesta classe que é realizado a comunicação com o SGBD. Esta classe deve ser chamada SOMENTE pela sua classe Control. NUNCA, eu disse NUNCA deve ser chamada pela tela ou por algum code-behind. NUUUUUNNNCCCAAAAA!!!!

    Ela também não deve ser chamada por outra DAO e nem por uma Controle de outra tabela. Exemplo: a classe PessoaDAO não pode ser chamada pela VeiculoControl, somente pode ser chamada pela PessoaControl.

    A classe Controle:

    Nesta classe ficam as validações, regras de negócio e gerencia dos dados. É uma "espécie de ponte" entre as telas e as DAO.

    A classe de visão:

    Visão é a camada responsável por apresentar os dados vindos do banco para o usuário e também responsável por obter do usuário os dados que irão para o banco.

    Eu acho que um code-behind pode ser considerado com uma visão.

    Sendo assim para a tabela PESSOAS teríamos os seguintes objetos: PessoaDAO, PessoaControl, Pessoa (que é a classe VO) e as visões pessoa.aspx / pessoa.aspx.cs (para um projeto web)

    MECÂNICA:

    Digamos que vc quer cadastrar uma nova pessoa.

    Na tela pessoa.aspx terá um botão que tem um evento. Depois que o usuário preencher todos os dados e clicar no botão, o seu code-behind (pessoa.aspx.cs) vai instanciar a classe VO (Pessoa), vai alimentar essa classe com os dados da tela, vai enviá-la para a PessoaControl, esta classe vai aplicar as regras de negócio (se tiver), validar alguns dados (se necessário), enviar o objeto VO (instanciado lá na tela) para a PessoaDAO e a PessoaDAO vai acionar a tabela ou procedure para realizar o insert.

    É mais ou menos isso cara!

    Qualquer dúvida posta ai.

    - Tiago Maia

    terça-feira, 22 de fevereiro de 2011 11:23
  • Se voce trabalha com MVC, deve ter a parte teorica muito bem definida. Mas, devido a sua duvida, tenho impressão que esses artigos vao te ajudar.

    http://weblogs.asp.net/scottgu/archive/2007/11/13/asp-net-mvc-framework-part-1.aspx

     


    ----------------------------
    Bruno Seixas
    Analista de Sistemas
    terça-feira, 22 de fevereiro de 2011 14:18
  • Olá Senhores, tudo bem ?

    Acredito que a estrutura em camadas que o Phellipe esta utilizando talvez não seja o MVC e sim a "tradicional", com a BE/BO (Bussiness Entities/Business Objects), BLL(Business Logic Layer) e DAL (Data Access Layer).

    Caso seja esta a estrutura utilizada por você Phellipe, sugiro a leitura do seguinte artigo(dividido em 3 partes), para entendimento do conceito a estrutura e utilização dos métodos de 3 camadas.

    A versão utilizada neste artigo é o .NET 2.0, mas o conceito de camadas esta muito bem explicado, e pode ser entendido facilmente (aprendi e entendi claramente através destes artigos a aplicação do conceito POO em .NET). Claro que com os frameworks mais recentes (3.5 / 4.0), tecnicamente o código do artigo pode ser melhorado, mas o conceito continua praticamente o mesmo.

    Seguem os link's:

    Building Layered Web Applications with Microsoft ASP.NET 2.0 - Part 1
    http://imar.spaanjaars.com/416/building-layered-web-applications-with-microsoft-aspnet-20-part-1

    Building Layered Web Applications with Microsoft ASP.NET 2.0 - Part 2
    http://imar.spaanjaars.com/419/building-layered-web-applications-with-microsoft-aspnet-20-part-2

    Building Layered Web Applications with Microsoft ASP.NET 2.0 - Part 3
    http://imar.spaanjaars.com/420/building-layered-web-applications-with-microsoft-aspnet-20-part-3

    Agora caso seja o MVC mesmo, o link que o Bruno Seixas passou e a explicação do Thiago C. Maia estão excelentes.

    []'s

    Michel Zerbinatti

    terça-feira, 22 de fevereiro de 2011 15:21
  • Phellipe,

    Conseguiu solucionar essa questão?


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    sexta-feira, 25 de março de 2011 16:55
    Moderador