Instruções passo a passo: salvando dados em um banco de dados (várias tabelas)
Um dos cenários mais comuns no desenvolvimento de aplicativos é exibir dados de um formulário em um aplicativo do Windows, editar e enviá-los atualizados de volta para o banco de dados. Essa explicação passo a passo cria um formulário que exibe dados de duas tabelas relacionadas e mostra como editar registros e salvar alterações no banco de dados. Este exemplo usa as tabelas Customers e Orders do banco de dados de exemplo Northwind.
Você pode salvar os dados em seu aplicativo de volta no banco de dados chamando o método Update de um TableAdapter. Ao arrastar itens da janela Fontes de Dados, o código para salvar dados é adicionado automaticamente para a primeira tabela arrastada para um formulário. Qualquer tabela adicional adicionada a um formulário exige a adição manual de qualquer código necessário para salvar dados. Essa explicação passo a passo mostra como adicionar código para salvar atualizações de mais de uma tabela.
Dica
As caixas de diálogo e os comandos de menu que você vê podem ser diferentes dos descritos na Ajuda, dependendo da sua edição ou das configurações ativas.Para alterar as configurações, escolha Importar e Exportar Configurações no menu Ferramentas.Para obter mais informações, consulte Personalizando configurações de desenvolvimento no Visual Studio.
As tarefas ilustradas neste passo a passo incluem:
Criando um novo projeto de Aplicativo do Windows.
Criando e configurando uma fonte de dados em seu aplicativo com o Assistente para Configuração da Fonte de Dados.
Configurando os controles dos itens na Janela Fontes de Dados. Para obter mais informações, consulte Como definir o controle a ser criado quando arrastado da janela Fontes de Dados.
Criando controles associados a dados arrastando itens da janela Fontes de Dados para o formulário.
Modificando um par de processos em cada tabela no conjunto de dados.
Modificando o código para enviar os dados atualizados no conjunto de dados de volta ao banco de dados.
Pré-requisitos
Para concluir este passo a passo, você precisará de:
- Acesso ao banco de dados de exemplo Northwind. Para obter mais informações, consulte Como instalar bancos de dados de exemplo.
Criando o aplicativo do Windows
A primeira etapa é criar um Aplicativo do Windows. A atribuição de um nome ao projeto é opcional nesta etapa, mas daremos um nome a ele porque pretendemos salvá-lo posteriormente.
Para criar o novo projeto de Aplicativo do Windows
No menu Arquivo, crie um novo projeto.
Nomeie o projeto UpdateMultipleTablesWalkthrough.
Selecione Aplicativo do Windows e clique em OK. Para obter mais informações, consulte Implementando aplicativos cliente com o .NET Framework.
O projeto UpdateMultipleTablesWalkthrough é criado e adicionado ao Gerenciador de Soluções.
Criando a Fonte de Dados
Esta etapa cria uma fonte de dados a partir de um banco de dados Northwind usando 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 a fonte 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.
Selecione Base de dados na página Escolher um Tipo de Fonte de Dados e, em seguida, clique em Próximo.
Sobre o Escolha sua conexão de dados página faça o seguinte:
Se uma conexão de dados no banco de dados de exemplo Northwind estiver disponível na lista suspensa, selecione-o.
-ou-
Selecione nova conexão para abrir o Adicionar/Modificar conexão caixa de diálogo.
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 Avançar na página Salvar cadeia de caracteres de conexão no arquivo de configuração do aplicativo.
Expanda o nó Tabelas na página Escolher Objetos do Banco de Dados.
Selecione as tabelas Customers e Orders e, em seguida, clique em Finalizar.
O NorthwindDataSet é adicionado ao projeto e as tabelas são exibidas na janela Fontes de Dados.
Configurando os controles a serem criados
Para esta explicação passo a passo, os dados na tabela Customers estarão no layout Detalhes em que dados são exibidos em controles individuais. Os dados da tabela Orders estarão no layout Grade exibidos em um controle DataGridView.
Definir o tipo de remoção dos itens na Janela Fontes de Dados
Expanda o nó Clientes na janela Fontes de Dados.
Altere o controle da tabela Clientes para controles individuais selecionando Detalhes na lista de controle no nó Clientes. Para obter mais informações, consulte Como definir o controle a ser criado quando arrastado da janela Fontes de Dados.
Criando o formulário de associação de dados
Você pode criar controles de associação de dados arrastando itens da janela Fontes de Dados para um formulário.
Para criar controles de associação de dados no formulário
Arraste o nó principal Clientes da janela Fontes de Dados para Form1.
Os controles de associação de dados com rótulos descritivos são exibidos no formulário, juntamente com uma faixa de ferramentas (BindingNavigator) para registros de navegação. Um NorthwindDataSet, CustomersTableAdapter, BindingSource e BindingNavigator são exibidos na bandeja de componentes.
Arraste o nó Ordens relacionado da janela Fontes de Dados para Form1.
Dica
O nó Ordens relacionado está localizado abaixo da coluna Fax e é um nó filho do nó Clientes.
Um controle DataGridView e uma faixa de ferramentas (BindingNavigator) para navegação em registros são exibidos no formulário. Um OrdersTableAdapter e BindingSource aparecem na bandeja de componentes.
Adicionando código para atualizar o banco de dados
É possível atualizar os bancos de dados chamando os métodos Update dos TableAdapters Clientes e Ordens. Por padrão, um manipulador de eventos para o botão BindingNavigatorSalvar do é adicionado ao código do formulário para enviar atualizações para o banco de dados. Esse procedimento modifica esse código para enviar atualizações na ordem adequada para eliminar a possibilidade de gerar erros de integridade referencial. O código também implementa manipulação de erros com a quebra automática da chamada de atualização em um bloco try-catch. Você pode mudar o código para atender às necessidades do seu aplicativo.
Dica
Para maior clareza, esta explicação passo a passo não usa uma transação, porém, se estiver atualizando duas ou mais tabelas relacionadas, será melhor incluir toda a lógica de atualização dentro de uma transação.Uma transação é um processo que garante que todas as alterações a um banco de dados são bem-sucedidas antes de aplicar qualquer alteração.Para obter mais informações, consulte Transações e simultaneidade.
Para adicionar lógica de atualização ao aplicativo
Clique duas vezes no botão Salvar no BindingNavigator para abrir o Editor de Códigos para o manipulador de eventos bindingNavigatorSaveItem_Click.
Substitua o código no manipulador de eventos para chamar os métodos Update dos TableAdapters relacionados. O código a seguir primeiro cria três tabelas de dados temporárias para armazenar as informações de cada DataRowState (Deleted, Added e Modified). Em seguida, as atualizações são executadas na ordem adequada. O código deve se parecer com o seguinte:
Me.Validate() Me.OrdersBindingSource.EndEdit() Me.CustomersBindingSource.EndEdit() Dim deletedOrders As NorthwindDataSet.OrdersDataTable = CType( NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Deleted), NorthwindDataSet.OrdersDataTable) Dim newOrders As NorthwindDataSet.OrdersDataTable = CType( NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Added), NorthwindDataSet.OrdersDataTable) Dim modifiedOrders As NorthwindDataSet.OrdersDataTable = CType( NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Modified), NorthwindDataSet.OrdersDataTable) Try ' Remove all deleted orders from the Orders table. If Not deletedOrders Is Nothing Then OrdersTableAdapter.Update(deletedOrders) End If ' Update the Customers table. CustomersTableAdapter.Update(NorthwindDataSet.Customers) ' Add new orders to the Orders table. If Not newOrders Is Nothing Then OrdersTableAdapter.Update(newOrders) End If ' Update all modified Orders. If Not modifiedOrders Is Nothing Then OrdersTableAdapter.Update(modifiedOrders) End If NorthwindDataSet.AcceptChanges() Catch ex As Exception MsgBox("Update failed") Finally If Not deletedOrders Is Nothing Then deletedOrders.Dispose() End If If Not newOrders Is Nothing Then newOrders.Dispose() End If If Not modifiedOrders Is Nothing Then modifiedOrders.Dispose() End If End Try
this.Validate(); this.ordersBindingSource.EndEdit(); this.customersBindingSource.EndEdit(); NorthwindDataSet.OrdersDataTable deletedOrders = (NorthwindDataSet.OrdersDataTable) northwindDataSet.Orders.GetChanges(DataRowState.Deleted); NorthwindDataSet.OrdersDataTable newOrders = (NorthwindDataSet.OrdersDataTable) northwindDataSet.Orders.GetChanges(DataRowState.Added); NorthwindDataSet.OrdersDataTable modifiedOrders = (NorthwindDataSet.OrdersDataTable) northwindDataSet.Orders.GetChanges(DataRowState.Modified); try { // Remove all deleted orders from the Orders table. if (deletedOrders != null) { ordersTableAdapter.Update(deletedOrders); } // Update the Customers table. customersTableAdapter.Update(northwindDataSet.Customers); // Add new orders to the Orders table. if (newOrders != null) { ordersTableAdapter.Update(newOrders); } // Update all modified Orders. if (modifiedOrders != null) { ordersTableAdapter.Update(modifiedOrders); } northwindDataSet.AcceptChanges(); } catch (System.Exception ex) { MessageBox.Show("Update failed"); } finally { if (deletedOrders != null) { deletedOrders.Dispose(); } if (newOrders != null) { newOrders.Dispose(); } if (modifiedOrders != null) { modifiedOrders.Dispose(); } }
Testando o aplicativo
Para testar o aplicativo
Pressione F5.
Faça algumas alterações nos dados de um ou mais registros em cada tabela.
Pressione o botão Salvar.
Confira os valores no banco de dados para verificar se as alterações foram salvas.
Próximas etapas
Dependendo dos requisitos de aplicativo, existem várias etapas que você talvez queira realizar após criar um formulário de associação de dados no aplicativo do Windows. Entre algumas das melhorias que você poderia fazer nessa explicação passo a passo estão:
Adicionando funcionalidade de busca ao formulário. Para obter mais informações, consulte Como adicionar uma consulta parametrizada a um aplicativo dos Windows Forms.
Editando a fonte de dados para adicionar ou remover objetos de banco de dados. Para obter mais informações, consulte Como editar um conjunto de dados.
Consulte também
Conceitos
Associando controles dos Windows Forms a dados no Visual Studio
Preparando o aplicativo para receber dados
Associando controles a dados no Visual Studio
Outros recursos
Instruções passo a passo de dados