none
Inserir Master-Detail - DAAB - C# Winforms RRS feed

  • Pergunta

  • Pessoal

     

    Tenho uma aplicação Winforms (C# Framework 2.0) na qual preciso inserir dados em duas tabelas (Master-Detail).

    As chaves das tabelas são inteiros Identity do SQL Server 2000..

    Ai vem meu problema

    Eu preciso inserir uma massa de dados tanto na tbl master quanto na tbl details....

    Estou fazendo isto via DAAB (Data Access Application Block).... eu passo o DataSet e uso os método UpdateDataSet para atualizar, excluir inserir dados...

    Para inserir dados em apenas uma tabela.. tudo certo.... o problema é para inserir dados nas duas tabelas (master e detail)...
    como ficariam os comandos de insert, update e delete ?

    Como a chave da master é Identity... no momento do preenchimento do DataSet (tbl detail) eu ainda não tenho a chave da tabela Master para incluir na Tabela Detail (FK)....

    Alguem já usou o DAL para resolver este problema ?

    Alguma sugestão ?

     

    Obrigado !

     

    Jean Carlo Mendes

    sexta-feira, 2 de fevereiro de 2007 12:10

Respostas

  • No seu comando insert voce vai ter que concatenar um ponto e virgula e depois um select que retorne o identity. Aí no datatable voce vai configurar o campo chave como identity também, e readonly. Quando voce inserir o dataset, ele vai ser repopulado com as chaves corretas para que voce possa inserir os registros filhos.

     

    Voce pode também usar os eventos do dataset com dataadapter para tratar linha a linha.

    domingo, 4 de fevereiro de 2007 22:33
  • Olá Mateus

    obrigado pela resposta.
    Já havia solucionado o problema... o caminho foi o citado por você.
    Após a sentença de insert da tabela master inseri o comando: ; SELECT Seq = SCOPE_IDENTITY()

    Além disto as duas tbls do Dataset precisam conter um DataRelation entre as colunas (PK e FK) e a constraint de FK configurados... com isto.. ao se inserir os dados na tbl master o DataSet automaticamente atualiza via cascade as colunas da tbl detail com o Identity retornado pelo BD.
    a Rule do UpdateRule tem que estar: UpdateRule = Rule.Cascade.

    Abraços

    Jean Carlo Mendes

    domingo, 4 de fevereiro de 2007 23:03

Todas as Respostas

  • No seu comando insert voce vai ter que concatenar um ponto e virgula e depois um select que retorne o identity. Aí no datatable voce vai configurar o campo chave como identity também, e readonly. Quando voce inserir o dataset, ele vai ser repopulado com as chaves corretas para que voce possa inserir os registros filhos.

     

    Voce pode também usar os eventos do dataset com dataadapter para tratar linha a linha.

    domingo, 4 de fevereiro de 2007 22:33
  • Olá Mateus

    obrigado pela resposta.
    Já havia solucionado o problema... o caminho foi o citado por você.
    Após a sentença de insert da tabela master inseri o comando: ; SELECT Seq = SCOPE_IDENTITY()

    Além disto as duas tbls do Dataset precisam conter um DataRelation entre as colunas (PK e FK) e a constraint de FK configurados... com isto.. ao se inserir os dados na tbl master o DataSet automaticamente atualiza via cascade as colunas da tbl detail com o Identity retornado pelo BD.
    a Rule do UpdateRule tem que estar: UpdateRule = Rule.Cascade.

    Abraços

    Jean Carlo Mendes

    domingo, 4 de fevereiro de 2007 23:03