Adicionar dados a uma consulta e gravar em outra tabela

20/06/2013

0

Sou iniciante em programação e a titulo de aprendizado preciso fazer um método que me permita fazer uma consulta ao banco e adicionar outros dados a esta consulta e depois de montada fazer a inserção destes dados no banco utilizando o linq.

A consulta busca no banco o registro da pessoa e adiciona o dia e a situação.


Consegui fazer a consulta e adicionar os dados que preciso, porem existe uma forma de inserir esta informação no banco os dados?

a tabela tem 4 colunas:

ID(int): chave primaria - incremento 1
CHAPA(int)
DATA(date)
SITUAÇÃO(VARCHAR)

public static IEnumerable SalvaPlano(string plano, string data)

        {

            WebDataDataContext dataClass = new WebDataDataContext();

            var dia = data;

            var situacao = "PRESENTE";

            var pess = from v in dataClass.PESSOALs

                       where v.CODSUBORD == plano

                       select new

                       {

                           v.CHAPA,

                           dia,

                           situacao,

                       };         

            IEnumerable pessoal = pess.AsEnumerable();

            return pessoal;

        }



Otalicio Junior/

Otalicio Junior/

Responder

Posts

20/06/2013

Pjava

Então, sua variável pess está carregada com tudo que está no BD. Agora você instancia sua Entities do BD que vc quer gravar, chama a entidade, assim:

minhaEntities me = new minhaEntities(); ==> Aponta para outro banco
minhaTabela tbl = new minhaTabela();

tbl.campo1 = pess.campo1;
tbl.campo2 = pess.campo2;

me.minhaTabela.AddObject(tbl);
me.SaveChanges();

Acho que isso funciona, testa aí. Você pode ter mais de uma edmx no seu projeto, cada um apontando para um BD distinto.
Responder

20/06/2013

Pjava

Correção. Eu li em outro banco e não outra tabela. Em outra tabela do mesmo banco, fica mais fácil. Ignore a nova instância de outro banco e só aponta para a tabela em questão. Nada muda, apenas a nova instância.
Responder

20/06/2013

Otalicio Junior/

Não consigo "puxar" as colunas dentro da variavel, mas consigo carregar o grid de acordo com a consulta que ja tinha pronta.
Responder

20/06/2013

Pjava

Perdão, era para ter feito um foreach.

foreach(var p in pess)
{
tbl.campo1 = p.campo1;
........
}

Dessa forma funciona
Responder

21/06/2013

Otalicio Junior/

O metodo ta gravando apenas 1 registro, segue o codigo como esta
public static IEnumerable SalvaPlano(string plano, string data)
        {
            WebDataDataContext dataClass = new WebDataDataContext();

            PRODUCAO tbl = new PRODUCAO();

                      
            var dia = data;
            var situacao = "PRESENTE";

            var pess = from v in dataClass.PESSOALs
                       where v.CODSUBORD == plano
                       select new
                       {
                           v.CHAPA,
                           dia,
                           situacao,
                       };

            foreach (var p in pess)
            {
                tbl.CHAPA = p.CHAPA;
                tbl.DATA = Convert.ToDateTime(p.dia);
                tbl.SITUACAO = p.situacao;

                
            }

            dataClass.PRODUCAOs.InsertOnSubmit(tbl);
            dataClass.SubmitChanges();

         
            IEnumerable pessoal = pess.AsEnumerable();
            
            return pessoal;
        }



tentei com o submit dentro do foreach, ele gravou apenas um registro e causou uma exception"{"Não é possível adicionar uma entidade que já existe."


 foreach (var p in pess)
            {
                tbl.CHAPA = p.CHAPA;
                tbl.DATA = Convert.ToDateTime(p.dia);
                tbl.SITUACAO = p.situacao;

                dataClass.PRODUCAOs.InsertOnSubmit(tbl);
                dataClass.SubmitChanges();
            }

           
Responder

21/06/2013

Pjava

Tente para isso

dataclass.minhaTabela.AddObject(tbl);
dataclass.SaveChanges();
Responder

21/06/2013

Pjava

Outra coisa. Coloca um break point no seu foreach e veja se a variável press tem mais de um registro sendo carregada na variável p. Caso haja mais de um registro sendo carregado no objeto tbl é possível que a chamada a IInumerable seja a raiz do problema, pode ser digo.
Responder

21/06/2013

Otalicio Junior/

O primeiro ciclo do foreach ocorre de maneira correta, a partir do segundo ocorre o erro no insertOnSubmit, olhando a gravação no banco ele tenta inserir os dados no ID(chave primaria) do primeiro insert, de alguma forma ele grava aquela posição e ocorre a exception.
Responder

21/06/2013

Otalicio Junior/

Funcionou!!

o que falta era colocar o instanciamento da tabela PRODUCAO dentro do laço. A instancia da tabela precisava ser iniciada a cada insert.


Obrigado pela ajuda.

Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar