Demonstra Passo a passo: Salvar dados de tabelas de dados relacionadas (atualização hierárquica)

Salvar os dados em um aplicativo de volta ao banco de dados é bastante simples quando você está trabalhando com uma única tabela de dados e nenhuma restrição de chave externa precisa ser considerada. Mas quando você precisa salvar dados de um DataSet que contém duas ou mais tabelas de dados relacionadas, você deve enviar as alterações para o banco de dados em uma ordem específica para que as restrições não sejam violadas. Quando você atualizar os dados modificados em tabelas relacionadas, você pode fornecer a lógica de programação para extrair os subconjuntos específicos de dados de cada tabela de dados e enviar as atualizações no banco de dados na ordem correta ou você pode usar o TableAdapterManager componente.

Essa explicação passo a passo mostra como salvar os dados relacionados usando o componente TableAdapterManager. Para obter informações sobre codificação de atualizações de tabela de dados relacionadas manualmente consulte, Demonstra Passo a passo: Salvando dados em um banco de dados (Multiple Tables).

Pré-requisitos

Para concluir esta explicação passo a passo, você precisa:

Criando aplicativos baseados no Windows

A primeira etapa nessa explicação passo a passo é criar um novo aplicativo baseado no Windows.

Para criar o novo aplicativo baseado no Windows

  1. No menu File, crie um novo projeto.

    ObservaçãoObservação

    Atualização Hierárquica tem suporte em projetos Visual Basic e C#, então crie o novo projeto em uma dessas linguagens.

  2. Nomeie o projeto como HierarchicalUpdateWalkthrough.

  3. Selecione Windows Application e clique em OK. Para obter mais informações, consulte Criando Aplicativos Baseados no Windows.

    O projeto UpdateSingleTableWalkthrough é criado e adicionado ao Solution Explorer.

Criando o Dataset

Como você precisa de tabelas relacionadas para demonstrar as atualizações hierárquicas, a próxima etapa é criar um DataSet que contém as tabelas Clientes e Pedidos do banco de dados Northwind. Crie o dataset executando o Data Source Configuration Wizard. Você deve ter acesso ao banco de dados de exemplos Northwind para criar a conexão. Para obter informações sobre como configurar o banco de dados de exemplo Northwind, consulte Como: Instalar bancos de dados de amostra.

Para criar o dataset

  1. No menu Data, clique em Show Data Sources.

  2. Na janela Data Sources, clique em Add New Data Source para iniciar o Data Source Configuration Wizard.

  3. Na página Choose a Data Source Type clique em Database e então clique em Next.

  4. Na página Choose your Data Connection siga um destes procedimentos:

    • Se uma conexão de dados para o banco de dados de exemplo Northwind estiver disponível na caixa de listagem suspensa, selecione-a.

      - ou -

    • Clique em New Connection para abrir a caixa de diálogo Add/Modify Connection. Para obter mais informações, consulte Adicionar/modificar a caixa de diálogo de conexão (geral).

  5. Se o banco de dados exige uma senha, selecione a opção para incluir dados confidenciais, e clique Next.

  6. Clique Next na página Save the Connection String to the Application Configuration File.

  7. Expanda o nó Tables na página Choose your Database Objects.

  8. Marque as caixas de seleção para as tabelas Customers e Orders e em seguida, clique em Finish.

    O NorthwindDataSet é criado e adicionado ao seu projeto e as tabelas aparecem na janela Data Sources .

Alterarando os controles vinculados a dados padrões a serem criados

Após preencher a janela Data Sources, você pode escolher os controles a serem criados quando você arrastar itens para um Formulário do Windows. Para essa explicação passo a passo, os dados da tabela Clientes serão exibidos em controles individuais (Details). Os dados da tabela Pedidos serão exibidos em um controle DataGridView ( DataGridView ) .

Para definir o controle para os itens na janela Data Sources

  1. Expanda o nó Customers na janela Data Sources.

  2. Altere os controles a serem criados para a tabela Customers para controles individuais clicando Details na lista de controle no nó Customers. Para obter mais informações, consulte Como: Definir o controle a ser criado ao arrastar da janela Data Sources.

    ObservaçãoObservação

    A tabela Orders irá usar o controle padrão, o DataGridView.

Criando o formulário vinculado a dados

Após escolher os controles na janela Data Sources, crie os controles vinculados a dados arrastando itens para o formulário.

Para criar controles vinculados a dados para os dados de Clientes e Pedidos

  1. Arraste o nó principal Customers da janela Data Sources no Form1.

    Controles vinculados a dados com rótulos descritivos aparecem no formulário, juntamente com um componente TableAdapterManager, uma barra de ferramentas (BindingNavigator) para navegar por registros. Um DataSet tipado, TableAdapter, e um BindingSource, aparecem na bandeja de componentes.

  2. Arraste o nó Orders relacionado da janela Data Sources para o Form1.

    ObservaçãoObservação

    O nó Orders relacionado está localizado abaixo do nó Fax da tabela clientes e é um nó filho do nó Customers. O nó Orders que aparece como um par para o nó Customers representa todos os pedidos na tabela. O nó Orders que aparece como um nó filho do nó Customers representa os pedidos relacionados.

    Um controle DataGridView e uma faixa de ferramenta (BindingNavigator) para navegação em registros aparecem no formulário. Um TableAdapter e um BindingSource aparecem na bandeja de componentes.

Modificando o código Salvar gerado para executar a atualização hierárquica

Salve as alterações das tabelas relacionadas no dataset para o banco de dados chamando o método TableAdapterManager.UpdateAll e passando o nome do dataset que contém as tabelas relacionadas. Por exemplo, execute o método TableAdapterManager.UpdateAll(NorthwindDataset) para enviar atualizações de todas as tabelas no NorthwindDataset para o banco de dados back-end.

Depois de soltar os itens da janela Data Sources, código é adicionado automaticamente ao evento Form_Load para preencher cada tabela (os métodos TableAdapter.Fill). Código também é adicionado ao evento de clique do botão Save do BindingNavigator para salvar dados do dataset de volta para o banco de dados (o método TableAdapterManager.UpdateAll).

O código save gerado também contém uma linha de código que chama o método CustomersBindingSource.EndEdit. Mais especificamente, ele chama o método EndEdit do primeiro BindingSource adicionado ao formulário. Em outras palavras, esse código é gerado apenas para a primeira tabela arrastada da janela Data Sources para o formulário. A chamada EndEdit confirma as alterações que estão em processo em quaisquer controles ligados a dados que estão sendo editados atualmente. Portanto, se um controle vinculado a dados ainda tem foco e você clicar no botão Save, todas edições pendentes nesse controle são confirmadas antes de salvar (o método TableAdapterManager.UpdateAll).

ObservaçãoObservação

O designer adiciona o código BindingSource.EndEdit somente para a primeira tabela descartada em um formulário. Portanto, você precisa adicionar uma linha de código para chamar o método BindingSource.EndEdit para cada tabela relacionada no formulário. Para essa explicação passo a passo, isso significa que você precisa adicionar uma chamada para o método OrdersBindingSource.EndEdit.

Para atualizar o código para confirmar as alterações nas tabelas relacionadas antes de salvar

  1. Clique duas vezes no botão Save em BindingNavigator para abrir o Form1 no Editor de Códigos.

  2. Adicione uma linha de código para chamar o método OrdersBindingSource.EndEdit após a linha que chama o método CustomersBindingSource.EndEdit. O código no evento de clique do botão Save deve se parecer com o seguinte:

    Me.Validate()
    Me.CustomersBindingSource.EndEdit()
    Me.OrdersBindingSource.EndEdit()
    Me.TableAdapterManager.UpdateAll(Me.NorthwindDataSet)
    
    this.Validate();
    this.customersBindingSource.EndEdit();
    this.ordersBindingSource.EndEdit();
    this.tableAdapterManager.UpdateAll(this.northwindDataSet);
    

Além de confirmar alterações em uma tabela filho relacionada antes de salvar dados em um banco de dados, você pode também ter de confirmar registros pai recém-criados antes de adicionar novos registros filho a um DataSet. Em outras palavras, você talvez precise adicionar o novo registro pai (Cliente) para o conjunto de dados antes de as restrições de chave externa permitirem que novos registros filho (Pedidos) sejam adicionados ao conjunto de dados. Para fazer isso, você pode usar o evento filho BindingSource.AddingNew.

ObservaçãoObservação

Você pode ou não ter de confirmar novos registros pai; depende do tipo de controle que é usado para vincular a sua fonte de dados. Nessa explicação passo a passo, você usa controles individuais para se vincular à tabela pai; isso requer o código adicional para confirmar o novo registro pai. Se os registros pai foram exibidos em um controle complexo de ligação como o DataGridView, esta chamada EndEdit adicional para o registro pai não seria necessária. Isso ocorre porque a funcionalidade vinculação de dados subjacentes do controle manipula a confirmação dos novos registros.

Para adicionar código para confirmar registros pai no conjunto de dados antes de adicionar novos registros filho

  1. Crie um manipulador de eventos para o evento OrdersBindingSource.AddingNew.

    • Abra Form1 no modo de design, clique em OrdersBindingSource na bandeja de componentes, selecione Events na janela Properties e em seguida, clique duas vezes no evento AddingNew.
  2. Adicione ao manipulador de eventos uma linha de código que chama o método CustomersBindingSource.EndEdit. O código no manipulador de eventos OrdersBindingSource_AddingNew deve ser semelhante ao seguinte:

    Me.CustomersBindingSource.EndEdit()
    
    this.customersBindingSource.EndEdit();
    

Verificando que atualizações hierárquicas estão habilitadas

Atualizações hierárquicas são ativadas e desativadas definindo a propriedade Hierarchical Update do DataSet. Atualizações hierárquicas são ativadas por padrão, de forma que para essa explicação passo a passo você não precisa alterar o valor da propriedade Hierarchical Update.

Para verificar que atualizações hierárquicas estão habilitadas

  1. Abra o dataset no Dataset Designer clicando duas vezes no arquivo NorthwindDataSet.xsd no Solution Explorer.

  2. Selecione uma área vazia na superfície de design.

  3. Localize a propriedade Hierarchical Update na Janela de Propriedades e verifique que ela está definida como True.

    ObservaçãoObservação

    A configuração da propriedade Hierarchical Update é que controla se o código é gerado com um TableAdapterManager e com a lógica para executar atualizações hierárquicas ou não. Definindo HierarchicalUpdate como True gera um TableAdapterManager; definindo HierarchicalUpdate como False não gera um TableAdapterManager.

Testando o aplicativo

Para testar o aplicativo

  1. Pressione F5.

  2. Faça algumas alterações em dados em um ou mais registros em cada tabela.

  3. Adicione um novo cliente e, em seguida, adicione um novo pedido para aquele cliente.

  4. Clique no botão Save. O TableAdapterManager manipula a lógica necessária para todas as atualizações relacionadas.

  5. Verifique os valores no banco de dados para verificar que as alterações foram salvas em cada tabela.

Próximas etapas

Dependendo dos requisitos do aplicativo, há várias etapas que você pode querer fazer depois de salvar os dados relacionados no aplicativo baseado no Windows. Alguns aprimoramentos que você poderia fazer para este aplicativo incluem o seguinte:

  • Adicionar uma terceira tabela, como a tabela DetalhesDoPedido e experimentar uma hierarquia de três tabelas.

  • Adicionar código de validação para verificar que os dados atendem aos requisitos do aplicativo além das restrições do banco de dados. Para obter mais informações, consulte Validando Dados.

Consulte também

Tarefas

Como: Configurar restrições de chave estrangeira em um Dataset.

Como: Definir a ordem ao executar uma atualização hierárquica

Como: Edições em processo de confirmação em controles ligados a dados antes de salvar dados

Como: Implementar a atualização hierárquica em projetos existentes de Visual Studio

Demonstra Passo a passo: Salvar dados de tabelas de dados relacionadas (atualização hierárquica)

Outros recursos

Atualização hierárquica

Salvando dados

DataSets, DataTables, and DataViews (ADO.NET)