Partilhar via


Visão geral do 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 do Visual Studio, ADO.NET Data Adapters eram usados para comunicação entre um aplicativo e um banco de dados. Embora adaptadores de dados ainda sejam um componente principal do .NET Framework Data Providers (ADO.NET), TableAdapters são componentes gerados pelo designer, que melhoram a funcionalidade de DataAdapters. TableAdapters normalmente contêm Fill e Update métodos para buscar e atualizar dados em um banco 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 de Configuração de Fonte de Dados. Você também pode criar TableAdapters em datasets existentes com o Assistente de Configuração para o TableAdapter ou arrastando objetos de banco de dados do Server Explorer para o Dataset Designer. Para obter mais informações, consulte Como: Crie 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 namespace 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 namespace 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 um Customers tabela de clientes em um estado determinado você pode criar um FillByState consulta leva um parâmetro para o valor de estado: SELECT * FROM Customers WHERE State = @State. Você executa a consulta chamando o FillByState método e passando o valor do parâmetro como este: 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 Dataset com dados.

TableAdapter.Update

Envia as alterações no banco de dados e retorna 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 uma 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.

ObservaçãoObservação

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 do seu código em vez de chamar o TableAdapter. Update para lidar com as inserções, atualizações e exclusões que estã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 anulável (Visual Basic). Para obter mais informações sobre tipos anuláveis em C#, consulte Usando os tipos anuláveis (TRANSLATION FROM VPE FOR CSHARP guia de programação).

Consulte também

Tarefas

Como: Conectar-se a Dados em um Banco de Dados

Demonstra Passo a passo: Conectando a dados em um banco de dados (Windows Forms)

Conceitos

O que há de novo no desenvolvimento de aplicativos de dados

Controles de vinculação de dados de Visual Studio

Outros recursos

Explicações Passo a passo sobre Dados

Preparando seu aplicativo para receber dados

Buscando dados em seu aplicativo

Editar dados no seu aplicativo

Validando Dados

Salvando dados