none
Enviar um table ou uma colecttion para o banco RRS feed

  • Pergunta

  • Tenho o seguinte na camada negócios para recuperar dados da tabela tblItensProtocolo:

      public ItemProtocoloColecao ConsultarPorProtocolo(int idProtocolo)
           {
               try
               {
                   //CRIAR UMA NOVA COLECAO DE ITEMPROTOCOLO
                   ItemProtocoloColecao itemProtocoloColecao = new ItemProtocoloColecao();
    
                   //LIMPAR PARAMETROS
                   acessoDadosSqlServer.LimparParametros();
    
                   //ADICIONAR PARAMETROS
                   acessoDadosSqlServer.AdicionarParametros("@idProtocolo", idProtocolo);
    
                   //CRIAR UM DATATABLE
                   DataTable dataTableItemProtocolo = acessoDadosSqlServer.ExecutarConsulta(CommandType.StoredProcedure, "dbo.uspItensProtocoloConsultarPorProtocoloID");
    
                   //
                   foreach (DataRow linha in dataTableItemProtocolo.Rows)
                   {
                       //CRIAR UM NOVO OBJETO ITEM PROTOCOLO
                       ItemProcotolo itemProtocolo = new ItemProcotolo();
    
                       //ADICIONAR VALORES EM SEUS ATRIBUTOS
                      // itemProtocolo.idProtocolo = Convert.ToInt32(linha["idProtocolo"]);
                       itemProtocolo.Item = Convert.ToInt32(linha["Item"]);
                       itemProtocolo.idTipoDoc = Convert.ToInt32(linha["idTipoDoc"]);
                       itemProtocolo.Descricao = Convert.ToString(linha["descricao"]);
                       itemProtocolo.NumeroDoc = Convert.ToString(linha["NumeroDoc"]);
                       itemProtocolo.DescricaoDoc = Convert.ToString(linha["DescricaoDoc"]);
    
                       itemProtocoloColecao.Add(itemProtocolo);
    
                   }
    
                   return itemProtocoloColecao;
               }
    
               catch (Exception exception)
               {
                   throw new Exception("Não foi possível consultar Coleção de Itens por protocolo! Detalhes :" + exception.Message);
               }
    
           }

    Como seria para eu fazer o inverso? Quero dizer. Como enviar uma collection ou uma table para o banco só com uma conexão. Procurei em vários sites e o que mais se aproximou foi a Tabela de Parametros. Mas ainda não entendi bem o seu funcionamento.

    Expl.: Entendi que posso recuperar os dados dessa tabela. Porém não sei como fazer para populala - já que ao que parece ela é recriada a cada conexão, perdendo assim os dados da conexão anterior. Então como fazer para persistir os dados e depois enviá-los para a tabela definitiva?

    Atenciosamente,

    Marcello M. Mariano 

    quinta-feira, 19 de março de 2015 01:46

Respostas

Todas as Respostas

  • Marcello,

    Sinceramente acredito que a sua dúvida esteja mais relacionada com uma falta de entendimento na forma de acessar um banco de dados, do que propriamente inserir ou manipular dados no banco.

    É isso?

    Se você deseja popular a tabela através da sua aplicação, teoricamente você tem que acessar o banco de dados de dentor da aplicação e fazer uso do comando Insert para enviar a relação de dados.


    Pedro Antonio Galvao Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    sexta-feira, 20 de março de 2015 22:36
  • Marcello,

    De fato, o parâmetro do tipo tabela será criado a cada conexão, porém, ao utilizar esse tipo de parâmetro na sua procedure, você terá a possibilidade de informar o conteúdo da tabela através de um list ou datatable que já esteja populado na sua aplicação.

    O link a seguir contém um exemplo de utilização deste tipo de parâmetro:

    http://www.mssqltips.com/sqlservertip/2112/table-value-parameters-in-sql-server-2008-and-net-c/



    Ao utilizar esse tipo de parâmetro na sua procedure, você terá a possibilidade de informar o conteudo da tabela através de um list ou datatable que já esteja populado na sua aplicação

    Espero que ajude! Luiz Phellipe

    domingo, 22 de março de 2015 00:07
  • Marcello,

    Na indicação acima você obteve os dados e "populou" uma entidade chamada "ItemProtocolo". 

    Dependendo de como você pretende estruturar sua camada de negócios, você poderá criar um método para "Incluir", um para "Alterar" e outro para "Excluir" os dados diretamente no banco de dados, utilizando outra classe que pode ser herdada para manipular uma ou mais Entidades.

    O conceito é complexo até você começar a aplicar na prática "o que é o que". 

    Segue abaixo alguns artigos interessantes que podem ajudar você a definir uma estrutura para sua aplicação:

    http://social.technet.microsoft.com/wiki/pt-br/contents/articles/12383.criando-um-repositorio-generico-para-entity-framework.aspx

    http://social.technet.microsoft.com/wiki/contents/articles/7326.desenvolvendo-aplicacoes-para-diferentes-cenarios-com-asp-net-mvc-e-ef-parte-2-pt-br.aspx

    https://msdn.microsoft.com/pt-br/library/dd756361(v=vs.110).aspx

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    • Marcado como Resposta Eduardo.Romero quarta-feira, 25 de março de 2015 20:08
    terça-feira, 24 de março de 2015 18:38
    Moderador