Instruções passo a passo: salvando dados de tabelas de dados relacionados (atualização hierárquica)
Salvar os dados de um aplicativo de volta ao banco de dados é bastante simples quando você está trabalhando com uma única tabela de dados e sem restrições de chave estrangeira a serem consideradas. No entanto, quando você precisa salvar os dados de um conjunto de dados que contém duas ou mais tabelas de dados relacionadas, é preciso enviar as alterações para o banco de dados em uma ordem específica para que as restrições não sejam violadas. Ao atualizar dados modificados em tabelas relacionadas, você pode fornecer a lógica programática para extrair os subconjuntos específicos de dados de cada tabela e enviar as atualizações para o banco de dados na ordem correta ou usar o componente TableAdapterManager.
Este passo a passo mostra como salvar os dados relacionados usando o componente TableAdapterManager. Para obter informações sobre como codificar as atualizações de tabelas de dados relacionadas de forma manual, consulte Instruções passo a passo: salvando dados em um banco de dados (várias tabelas).
Pré-requisitos
Para concluir esta explicação passo a passo, será necessário:
- Acesso ao banco de dados de exemplo Northwind. Para obter mais informações, consulte Como instalar bancos de dados de exemplo.
Criando o aplicativo baseado no Windows
A primeira etapa neste passo a passo é criar um novo aplicativo baseado no Windows.
Para criar o novo aplicativo baseado no Windows
No menu Arquivo, crie um novo projeto.
Dica
A atualização hierárquica tem suporte em projetos do Visual Basic e C#, portanto, crie o novo projeto em uma dessas linguagens.
Nomeie o projeto como HierarchicalUpdateWalkthrough.
Selecione Aplicativo do Windows Forms e clique em OK. Para obter mais informações, consulte Implementando aplicativos cliente com o .NET Framework.
O projeto HierarchicalUpdateWalkthrough é criado e adicionado ao Gerenciador de Soluções.
Criando o conjunto de dados
Uma vez que você precisa de tabelas relacionadas para demonstrar as atualizações hierárquicas, a próxima etapa é criar um conjunto de dados que contenha as tabelas Clientes e Pedidos do banco de dados Northwind. Crie o conjunto de dados executando o Assistente de Configuração de Fonte de Dados. É preciso ter acesso ao banco de dados de exemplo 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 exemplo.
Para criar o conjunto de dados
No menu Dados, clique em Mostrar Fontes de Dados.
Na janela Fontes de Dados, clique em Adicionar Nova Fonte de Dados para iniciar o Assistente de Configuração de Fonte de Dados.
Na página Escolher um Tipo de Fonte de Dados, selecione Banco de Dados e clique em Próximo.
Na página Escolha a Conexão de Dados, execute uma das seguintes ações:
Se uma conexão de dados com o banco de dados de exemplo Northwind estiver disponível na caixa da lista suspensa, clique nela.
-ou-
Selecione Nova Conexão para abrir a caixa de diálogo Adicionar/Modificar Conexão.
Se o banco de dados exigir uma senha, selecione a opção para incluir dados confidenciais e, em seguida, clique em Próximo.
Clique em Próximo na página Salvar a Cadeia de Conexão no Arquivo de Configuração do Aplicativo.
Expanda o nó Tabelas na página Escolher Objetos do Banco de Dados.
Clique nas caixas de seleção das tabelas Clientes e Pedidos e, em seguida, clique em Concluir.
O NorthwindDataSet é criado e adicionado ao projeto e as tabelas aparecem na janela Fontes de Dados.
Alterando os controles de associação de dados padrão a serem criados
Depois de preencher a janela Fontes de Dados, você pode escolher os controles a serem criados ao arrastar itens para um Windows Form. Neste passo a passo, os dados da tabela Clientes serão exibidos em controles individuais (Detalhes). Os dados da tabela Pedidos serão exibidos em um controle DataGridView (DataGridView).
Para definir o controle dos itens na janela Fontes de Dados
Expanda o nó Clientes na janela Fontes de Dados.
Altere os controles a serem criados para a tabela Cliente por controles individuais clicando em Detalhes na lista de controle do nó Clientes. Para obter mais informações, consulte Como definir o controle a ser criado quando arrastado da janela Fontes de Dados.
Dica
A tabela Pedidos usará o controle padrão, o DataGridView.
Criando o formulário de associação de dados
Depois de selecionar os controles na janela Fontes de Dados, crie os controles de associação de dados arrastando itens para o formulário.
Para criar controles de associação de dados para os dados de Clientes e Pedidos
Arraste o nó principal Clientes da janela Fontes de Dados para Form1.
Os controles de associação de dados com rótulos descritivos aparecem no formulário, juntamente com um componente TableAdapterManager, uma ferramenta (BindingNavigator) para registros de navegação. Um DataSet, TableAdapter e BindingSource aparecem na bandeja de componentes.
Arraste o nó Ordens relacionado da janela Fontes de Dados para Form1.
Dica
O nó relacionado de Pedidos está localizado abaixo do nó Fax da tabela de clientes e é um nó filho do nó Clientes.O nó Pedidos que aparece como par do nó Clientes representa todos os pedidos na tabela.O nó Pedidos que aparece como nó filho do nó Clientes representa os pedidos relacionados.
Um controle DataGridView e uma barra de ferramentas (BindingNavigator) para registros de navegação aparecem no formulário. Um TableAdapter e um BindingSource aparecem na bandeja de componentes.
Modificando o código Salvar gerado para realizar a atualização hierárquica
Salve as alterações das tabelas relacionadas de dados no conjunto de dados para o banco de dados chamando o método TableAdapterManager.UpdateAll e passando no nome do conjunto de dados 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 Fontes de Dados, o código é automaticamente adicionado ao evento Form_Load para preencher cada tabela (os métodos TableAdapter.Fill). O código também é adicionado ao evento de clique do botão Salvar do BindingNavigator para salvar os dados do conjunto de dados de volta ao banco de dados (o método TableAdapterManager.UpdateAll).
O código salvar gerado também contém uma linha de código que chama o método CustomersBindingSource.EndEdit. Para ser mais específico, 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 Fontes de Dados para o formulário. A chamada EndEdit confirma as alterações que estão em processo em qualquer controle de associação de dados sendo editado no momento. Portanto, se um controle de associação de dados ainda estiver em foco e você clicar no botão Salvar, todas as edições pendentes nesse controle serão confirmadas antes da gravação real (o método TableAdapterManager.UpdateAll).
Dica
O designer só adiciona o código BindingSource.EndEdit para a primeira tabela arrastada para o formulário.Portanto, é necessário adicionar uma linha de código para chamar o método BindingSource.EndEdit para cada tabela relacionada no formulário.Para este passo a passo, isso significa que você precisa adicionar uma chamada ao método OrdersBindingSource.EndEdit.
Para atualizar o código para confirmar as alterações às tabelas relacionadas antes de salvar
Clique duas vezes no botão Salvar no BindingNavigator para abrir Form1 no Editor de Códigos.
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 Salvar deve ser semelhante ao 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 as alterações em uma tabela filho relacionada antes de salvar dados em um banco de dados, você também pode confirmar registros pais recém-criados antes de adicionar novos registros filhos a um conjunto de dados. Em outras palavras, pode ser necessário adicionar o novo registro pai (Cliente) para o conjunto de dados antes que as restrições de chave estrangeira permitam que novos registros filhos (Pedidos) sejam adicionados ao conjunto de dados. Para realizar isso, você pode usar o evento filho BindingSource.AddingNew.
Dica
Você pode ou não ter de confirmar novos registros pais; isso depende do tipo de controle usado para associar à sua fonte de dados.Neste passo a passo, você usa controles individuais para associar à tabela pai. Esse procedimento requer o código adicional para confirmar o novo registro pai.Se os registros pais foram exibidos em um controle de associação complexo como o DataGridView, essa chamada adicional EndEdit para o registro pai não seria necessária.Isso porque a funcionalidade subjacente de associação de dados do controle processa a confirmação dos novos registros.
Para adicionar código para confirmar registros pais no conjunto de dados antes de adicionar novos registros filhos
Crie um manipulador de eventos para o evento OrdersBindingSource.AddingNew.
- Abra Form1 na exibição de design, clique em OrdersBindingSource na bandeja de componentes, selecione Eventos na janela Propriedades e clique duas vezes no evento AddingNew.
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 se as atualizações hierárquicas estão habilitadas
As atualizações hierárquicas são ativadas e desativadas pela definição da propriedade Atualização Hierárquica do banco de dados. As atualizações hierárquicas são habilitadas por padrão, portanto, para este passo a passo não é necessário alterar o valor da propriedade Atualização Hierárquica.
Para verificar se as atualizações hierárquicas estão habilitadas
Abra o conjunto de dados no Designer de Conjunto de Dados clicando duas vezes no arquivo NorthwindDataSet.xsd no Gerenciador de Soluções.
Selecione uma área vazia na superfície de design.
Localize a propriedade Atualização Hierárquica em Janela Propriedades e verifique se está configurada como Verdadeiro.
Dica
A configuração da propriedade Atualização Hierárquica é o que controla se o código é gerado ou não com um TableAdapterManager e a lógica para realizar atualizações hierárquicas.A configuração de Atualização Hierárquica como Verdadeiro gera um TableAdapterManager. A configuração de Atualização Hierárquica como Falso não gera um TableAdapterManager.
Testando o aplicativo
Para testar o aplicativo
Pressione F5.
Faça algumas alterações nos dados de um ou mais registros em cada tabela.
Adicione um novo cliente e adicione um novo pedido para esse cliente.
Clique no botão Salvar. O TableAdapterManager manipula a lógica necessária para todas as atualizações relacionadas.
Examine os valores no banco de dados para verificar se as alterações foram salvas em cada tabela.
Próximas etapas
Dependendo dos requisitos do aplicativo, existem várias etapas que você talvez queira realizar após salvar os dados relacionados no aplicativo baseado em Windows. Entre algumas das melhorias que você pode fazer neste aplicativo estão:
Adição de uma terceira tabela, tal como a tabela OrderDetails e teste com uma hierarquia de três tabelas.
Adição de código de validação para verificar se 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 conjunto de dados
Como definir a ordem ao executar uma atualização hierárquica
Como confirmar edições em processo em controles associados a dados antes de salvar dados
Como implementar atualização hierárquica em projetos existentes no Visual Studio
Instruções passo a passo: salvando dados de tabelas de dados relacionados (atualização hierárquica)