Compartilhar via


Visão geral de TableAdapter

Os TableAdapters fornecem a comunicação entre o seu aplicativo e um banco de dados. Mais especificamente, um TableAdapter se conecta a um banco de dados, executa consultas ou procedimentos armazenados, e retorna uma nova tabela de dados preenchida com os dados retornados ou preenche uma DataTable existente com os dados retornados. TableAdapters também são usados para enviar dados atualizados do seu aplicativo de volta para o banco de dados.

Os usuários de versões anteriores do Visual Studio podem pensar em um TableAdapter como um DataAdapter com um objeto de conexão interno e a capacidade para conter várias consultas. Cada consulta adicionada a um TableAdapter é exposta como um método público que é simplesmente chamado como todos os outros métodos ou funções em um objeto.

Além da funcionalidade padrão de um DataAdapter, TableAdapters fornecem métodos tipados adicionais que encapsulam consultas que compartilham um esquema comum com o DataTable tipado associado. Em outras palavras, você pode ter tantas consultas quanto você deseja em um TableAdapter desde que elas retornem dados em conformidade com o mesmo esquema.

Na versão anterior de Visual Studio, os adaptadores de dados ADO.NET foram usados para comunicação entre um aplicativo e um base de dados. Enquanto adaptadores de dados são ainda um componente principal de Provedores de dados .NET Framework, TableAdapters são componentes gerados que aprimoram a funcionalidade de DataAdapterS. TableAdapters normalmente contém Fill e métodos de Update para buscar e atualizar dados em uma base de dados.

TableAdapters são criados com o Dataset Designer no interior de datasets fortemente tipados. Você pode criar TableAdapters durante a criação de um novo conjunto de dados com o Assistente para Configuração da Fonte de Dados. Você também pode criar TableAdapters em datasets existentes com o TableAdapter Assistente de Configuração ou arrastando objetos de banco de dados do Server Explorer para o Dataset Designer. Para obter mais informações, consulte Como criar TableAdapters.

Enquanto TableAdapters são criados com o DataSet Designer, as classes TableAdapter geradas não serão geradas como classes aninhados do DataSet. Eles estão localizados em um espaço para nomes separado específico para cada conjunto de dados. Por exemplo, se você tiver um conjunto de dados chamado NorthwindDataSet, os TableAdapters associados com as DataTable s no NorthwindDataSet estariam no espaço para nomes NorthwindDataSetTableAdapters. Para acessar um determinado TableAdapter por código, você deve declarar uma nova instância do TableAdapter. Por exemplo:

Dim northwindDataSet As New NorthwindDataSet()
Dim customersTableAdapter As New NorthwindDataSetTableAdapters.CustomersTableAdapter()

customersTableAdapter.Fill(northwindDataSet.Customers)
NorthwindDataSet northwindDataSet = new NorthwindDataSet();

NorthwindDataSetTableAdapters.CustomersTableAdapter customersTableAdapter = 
    new NorthwindDataSetTableAdapters.CustomersTableAdapter();

customersTableAdapter.Fill(northwindDataSet.Customers);

Esquema associado a DataTable

Ao criar um TableAdapter, a consulta inicial ou procedimento armazenado é usado para definir o esquema da DataTable associada do TableAdapter Você executa essa consulta inicial ou procedimento armazenado chamando o método Fill principal do TableAdapter (que preenche a DataTable associada do TableAdapter). Quaisquer alterações feitas à consulta principal do TableAdapter são refletidas no esquema da tabela de dados associada. Por exemplo, remover uma coluna da consulta principal remove a coluna a partir de tabela de dados associada. Se quaisquer consultas adicionais no TableAdapter usam instruções SQL retornando colunas que não estão na consulta principal, em seguida, o designer tentará sincronizar as alterações da coluna entre a consulta principal e quaisquer consultas adicionais. Para obter mais informações, consulte Como editar TableAdapters.

Comandos UPDATE do TableAdapter

A funcionalidade de atualização de um TableAdapter depende de quanta informação está disponível com base na consulta principal fornecida no TableAdapter Wizard. Por exemplo, TableAdapters que estejam configurados para buscar valores de várias tabelas (JOINs), valores escalares, ou de resultados de funções agregadas, não são criados inicialmente com a capacidade de enviar atualizações de volta para o banco de dados subjacente. Entretanto, você pode configurar os comandos INSERT, UPDATE e DELETE manualmente na janela Properties.

Consultas do TableAdapter

TableAdapter com várias consultas

Diferentemente dos adaptadores de dados padrão, os TableAdapters podem conter consultas múltiplas para preencher suas tabelas de dados associadas. Você pode definir tantas consultas para um TableAdapter quanto seu aplicativo precisar, desde que cada consulta retorne os dados de acordo com o mesmo esquema da sua tabela de dados associada. Isso permite o carregamento de dados que satisfaçam critérios diferentes. Por exemplo, se seu aplicativo contiver uma tabela de clientes, você pode criar uma consulta que preenche a tabela com cada cliente cujo nome começa com uma certa letra, e outra consulta que preenche a tabela com todos os clientes localizados no mesmo estado. Para preencher uma tabela Customers com clientes em um estado determinado você pode criar uma consulta FillByState que recebe um parâmetro para o valor de estado: SELECT * FROM Customers WHERE State = @State. Você executa a consulta chamando o método FillByState e passando o valor do parâmetro assim: CustomerTableAdapter.FillByState("WA"). Para obter mais informações, consulte Como criar consultas TableAdapter.

Além de consultas que retornam dados do mesmo esquema que a tabela de dados do TableAdapter, você pode adicionar consultas que retornam valores escalares (simples). Por exemplo, criar uma consulta que retorna uma contagem de clientes (SELECT Count(*) From Customers) é válido para um CustomersTableAdaptermesmo que os dados retornados não estejam de acordo com o esquema da tabela.

Propriedade ClearBeforeFill

O TableAdapter adiciona uma propriedade não disponível na classe base DataAdapter. Por padrão, sempre que você executa uma consulta para preencher uma tabela de dados do TableAdapter, os dados apagados e apenas os resultados da consulta são carregados na tabela. Defina a propriedade ClearBeforeFill do TableAdapter para false se você quiser adicionar ou mesclar os dados retornados de uma consulta aos dados existentes em um tabela de dados. Independentemente de você apagar os dados, você precisa explicitamente enviar atualizações de volta para o banco de dados, se desejado. Portanto, lembre-se de salvar as alterações feitas aos dados na tabela antes de executar outra consulta que preenche a tabela. Para obter mais informações, consulte Como atualizar dados usando um TableAdapter.

Herança do TableAdapter

TableAdapters estendem a funcionalidade dos adaptadores de dados padrão encapsulando uma DataAdapter configurada. Por padrão, o TableAdapter herda de Component e não pode ser convertido para a classe DataAdapter. Converter um TableAdapter para um DataAdapter resulta em um InvalidCastException. Para alterar a classe base de um TableAdapter, você pode digitar uma classe que é derivada de Component na propriedade Base Class do TableAdapter no DataSet Designer.

Métodos e propriedades do TableAdapter

A classe TableAdapter não é parte do .NET Framework, assim você não pode procurar por ele na documentação ou no Object Browser. Ele é criado no tempo de design quando você usa um dos assistentes mencionados acima. O nome atribuído a um TableAdapter quando você o cria é baseado no nome da tabela com a qual você estiver trabalhando. Por exemplo, ao criar um TableAdapter com base em uma tabela em um banco de dados chamado Orders, o TableAdapter será nomeado OrdersTableAdapter. O nome de classe do TableAdapter pode ser alterado usando a propriedade Name no Dataset Designer.

Estes são os métodos e propriedades mais usados de TableAdapters:

Membro

Descrição

TableAdapter.Fill

Preenche a tabela de dados associada ao TableAdapter com os resultados do comando SELECT. Para obter mais informações, consulte Como preencher um conjunto de dados com dados.

TableAdapter.Update

Envia alterações de volta a base de dados e retornam-se um número inteiro que representa o número de linhas afetadas pela atualização. Para obter mais informações, consulte Como atualizar dados usando um TableAdapter.

TableAdapter.GetData

Retorna uma nova DataTable preenchida com dados.

TableAdapter.Insert

Cria uma nova linha na tabela de dados. Para obter mais informações, consulte Como adicionar linhas a um DataTable.

TableAdapter.ClearBeforeFill

Determina se uma tabela de dados é esvaziada antes de chamar um dos métodos Fill.

Método Update do TableAdapter

TableAdapters usam comandos de dados para a ler e gravar a partir do banco de dados. A consulta Fill inicial (principal) do TableAdapter é usada como base para criar o esquema da tabela de dados associada, bem como os comandos InsertCommand,UpdateCommand e DeleteCommand associados com o método TableAdapter.Update. Isso significa que chamar um método Update do TableAdapter executa as instruções criadas quando o TableAdapter foi originalmente configurado, e não uma das consultas adicionais adicionada com o TableAdapter Query Configuration Wizard.

Quando você usar um TableAdapter, ele efetivamente executa as mesmas operações com os comandos que você geralmente deseja executar. Por exemplo, quando você chamar o método Fill do adaptador, o adaptador executa o comando de dados na sua propriedade SelectCommand e usa um leitor de dados (por exemplo, SqlDataReader) para carregar o conjunto de resultados na tabela de dados. Da mesma forma, quando você chama o método Update do adaptador, ele executa o comando apropriado (nas propriedades UpdateCommand, InsertCommand e DeleteCommand) para cada registro alterado na tabela de dados.

Dica

Se não houver informações suficientes na consulta principal, os comandos InsertCommand, UpdateCommand e DeleteCommand são criados por padrão quando o TableAdapter é gerado.Se a consulta principal do TableAdapter é mais do que uma declaração SELECT de uma tabela simples é possível que o designer não consiga gerar os comandos InsertCommand, UpdateCommand e DeleteCommand.Se esses comandos não são gerados, você pode receber um erro ao executar o método TableAdapter.Update.

GenerateDbDirectMethods do TableAdapter

Além de InsertCommand, UpdateCommand e DeleteCommand, TableAdapters são criados com métodos que podem ser executados diretamente no banco de dados. Esses métodos (TableAdapter.Insert, TableAdapter.Update e TableAdapter.Delete) podem ser chamados diretamente para manipular dados no banco de dados. Isso significa que você pode chamar esses métodos individuais de seu código em vez de chamar TableAdapter.Update para manipular as inserções, atualizações e exclusões, que são pendentes para a tabela de dados associada.

Se você não deseja criar esses métodos diretos, defina a propriedade GenerateDbDirectMethods do TableAdapter como false (na janela Properties). Consultas adicionais do TableAdapter são consultas autônomas — que não geram esses métodos.

Suporte do TableAdapter para tipos Nullable

Os TableAdapters oferecem suporte a tipos anuláveis Nullable(Of T) e T?. Para obter mais informações sobre tipos anuláveis em Visual Basic, consulte Tipos de valor que permitem valor nulo (Visual Basic). Para obter mais informações sobre tipos anuláveis em C#, consulte Usando tipos anuláveis (Guia de Programação em C#).

Consulte também

Tarefas

Como conectar a dados em um banco de dados

Instruções passo a passo: conectando a dados em um banco de dados (Windows Forms)

Conceitos

Preparando o aplicativo para receber dados

Buscando dados no aplicativo

Associando controles a dados no Visual Studio

Editando dados no aplicativo

Validando dados

Salvando dados

Outros recursos

Instruções passo a passo de dados