Introdução a adaptadores de dados
Adaptadores de dados são uma parte integral de provedores gerenciados do ADO.NET, que são o conjunto de objetos usados para comunicação entre uma fonte de dados e um DataSet.(Além de adaptadores, provedores gerenciados incluem objetos de conexão, objetos do leitor de dados e objetos de linha de comando.) Adaptadores são usados para trocar dados entre uma fonte de dados e um DataSet.Em muitos aplicativos, isso significa ler dados a partir de um banco de dados para um DataSet e em seguida, gravar dados alterados no conjunto de dados novamente para o banco de dados.No entanto, um adaptador de dados pode mover dados entre qualquer fonte e um DataSet.Por exemplo, poderia haver um adaptador que move dados entre um servidor Microsoft Exchange e um DataSet.
Observação: |
---|
Na versão anterior do Visual Studio, adaptadores de dados eram usados para comunicação entre um aplicativo e um banco de dados. Enquanto adaptadores de dados são ainda um componente principal do .NET Framework Providers Dados, TableAdapters são componentes gerados pelo designer que simplificam o processo de mover dados entre seu aplicativo e um banco de dados.Para obter mais informações sobre como trabalhar com TableAdapters, consulte Visão geral do TableAdapter. |
Geralmente, os adaptadores são configuráveis para permitir que você especifique quais os dados a serem movidos para dentro e para fora do conjunto de dados.Geralmente isso assume a forma de referências a instruções SQL ou procedimentos armazenados que são chamados para ler ou gravar em um banco de dados.
Visual Studio torna esses adaptadores de dados disponíveis para uso com bancos de dados:
O objeto OleDbDataAdapter é adequado para uso com qualquer fonte de dados exposta por um provedor OLE DB.
O objeto SqlDataAdapter é específico para SQL Server.Porque ele não tem que passar por uma camada OLE DB, ele é mais rápido que a classe OleDbDataAdapter.No entanto, ele pode ser usado apenas com SQL Server 7.0 ou posterior.
O objeto OdbcDataAdapter é otimizado para acessar fontes de dados ODBC.
O objeto OracleDataAdapter é otimizado para acessar bancos de dados Oracle.
Observação: Adaptadores de dados, conexões de dados, comandos de dados e leitores de dados são os componentes que constituem um provedor de dados .NET Framework.A Microsoft e provedores de terceiros podem disponibilizar outros provedores de dados .NET estrutura que podem ser integrados em Visual Studio.Para obter mais informações sobre os diferentes provedores de dados .NET Framework, consulte .NET Framework Providers Dados.
Você pode criar e manipular adaptadores usando as seguintes partes dos namespaces do provedor gerenciado .NET Framework.
Namespace do Provedor Gerenciado SqlClient
Namespace do Provedor Gerenciado OleDb
Geralmente, cada adaptador de dados troca dados entre uma tabela única da fonte de dados e um único objeto DataTable no DataSet.Se o conjunto de dados contiver várias tabelas de dados, a estratégia comum é ter vários adaptadores de dados o alimentando com dados e gravando seus dados de volta para tabelas individuais da fonte de dados.
Quando você deseja preencher uma tabela em um conjunto de dados, você chama um método do adaptador que executa uma instrução SQL ou procedimento armazenado.O adaptador cria um objeto leitor de dados (SqlDataReader, OleDbDataReader, OdbcDataReader, ou OracleDataReader) para ler os dados em um DataSet.
Observação: |
---|
Você pode ler dados a partir do banco de dados sem ter de armazená-los em um DataSet, o que pode ser muito eficiente para situações que envolvam dados somente de leitura.Para obter mais informações, consulte "Dados Somente de leitura" abaixo.Você também pode executar instruções SQL diretamente sem usá-las para preencher um DataSet.Para obter mais informações, consulte Trabalhando com DataReaders. |
Da mesma forma, quando você deseja atualizar o banco de dados, você chama um método do adaptador que chama uma Instrução SQL apropriada ou procedimento armazenado para fazer a atualização real no banco de dados.
Adaptadores de dados e tabelas relacionadas
Uma implicação de ter tabelas separadas no dataset é que um adaptador de dados normalmente não faz referência a comandos SQL ou procedimentos armazenados que se associam a tabelas.Em vez disso, informações de tabelas relacionadas são lidas separadamente para o conjunto de dados por diferentes adaptadores.Em seguida, um objeto DataRelation é usado para gerenciar as restrições entre as tabelas do DataSet (como atualizações em cascata) e para permitir que você navegue entre registros filho e mestre relacionados.
Por exemplo, imagine que você está trabalhando com duas tabelas relacionadas no banco de dados Northwind, Customers e Orders.Em vez de especificar uma união para combinar as duas tabelas em um único conjunto de resultados, você iria mais comumente definir dois adaptadores, um para preencher uma tabela Customers no DataSet e um segundo adaptador para ler registros Order para uma tabela diferente do DataSet.Os adaptadores individuais provavelmente incluiriam critérios de seleção para limitar o número de registros nas tabelas de dados.
No DataSet você também definiria um objeto DataRelation especificando que registros de pedidos estejam relacionados aos registros de cliente pelo campo CustomerID.Você pode ainda gerenciar as tabelas individualmente, o que não seria possível se você tivesse tabelas associadas antes de buscar registros da fonte de dados.Para situações em que você quiser trabalhar com registros relacionados, você pode chamar propriedades e métodos do objeto DataRelation.
Para obter mais informações, consulte Relacionamentos em DataSets.
Objetos de conexão
Um adaptador de dados precisa de uma conexão aberta a uma fonte de dados para ler e gravar dados.Portanto, um adaptador usa objetos de conexão (SqlConnection, OleDbConnection, OdbcConnection, ou OracleConnection) para se comunicar com uma fonte de dados.(O adaptador pode conter até quatro referências de conexão, um para cada tipo de ação que ele pode executar: Selecionar, atualizar, inserir e excluir.)
A tabela a seguir lista objetos de conexão na guia Data da Toolbox:
Objetos de conexão |
Descrição |
---|---|
Uma conexão com um banco de dados SQL Server 7.0 ou posterior. |
|
Uma conexão para qualquer fonte de dados OLE DB. |
|
Uma conexão a uma fonte de dados ODBC. |
|
Uma conexão com um banco de dados Oracle |
Em todos os casos, o objeto de conexão representa uma sessão exclusiva dentro da fonte de dados.Todos os objetos de conexão fornecem propriedades para estabelecer e modificar detalhes de conexão (como ID de usuário e senha, e configuração de connection-timeout).Eles também fornecem métodos para iniciar, confirmar e reverter transações do banco de dados.Para obter mais informações sobre objetos de conexão, consulte Conectando-se a fontes de dados.
Observação de segurança: |
---|
Armazenar detalhes de informações confidenciais (tais como o nome do servidor, nome de usuário e senha) pode ter implicações para a segurança de seu aplicativo.Usar a autenticação do Windows (também conhecida como segurança integrada) é uma maneira mais segura de controlar o acesso a um banco de dados. |
Objetos decomando do ADO.NET
Usando um adaptador, você pode ler, adicionar, atualizar e excluir registros em uma fonte de dados.Para permitir que você especifique como cada uma dessas operações deve ocorrer, um adaptador suporta as seguintes quatro propriedades:
SelectCommand – referência a um comando (nome de Instrução SQL ou procedimento armazenado) que recupera linhas a partir do armazenamento de dados.
InsertCommand – referência a um comando para inserir linhas no armazenamento de dados.
UpdateCommand – referência a um comando para modificar linhas no armazenamento de dados.
DeleteCommand – referência a um comando para excluir linhas do armazenamento de dados.
As propriedades são objetos — são instâncias de classe SqlCommand, OleDbCommand, OdbcCommand, ou OracleCommand.Os objetos oferecem suporte a uma propriedade CommandText contendo uma referência a uma instrução SQL ou procedimento armazenado.
Observação: |
---|
A classe de comando deve coincidir com a classe de conexão.Por exemplo, se você estiver usando um SqlConnection objeto para se comunicar com um SQL servidor, você também deve usar os comandos que derivam do SqlCommand classe. |
Embora você possa definir explicitamente o texto de um objeto de comando, você nem sempre precisa; em muitas situações, Visual Studio gerará as instruções SQL necessárias.Além disso, o adaptador pode gerar automaticamente instruções SQL apropriadas no tempo de execução se os objetos UpdateCommand,InsertCommand,ou DeleteCommand não estiverem especificados.Para obter mais informações, consulte Automatically Generating Comandos.
No entanto, você pode manipular objetos de comando em tempo de design e tempo de execução para ter controle mais direto sobre como os comandos são executados.Por exemplo, você pode criar ou modificar o comando associado a um objeto SelectCommand logo antes que ele seja executado.
Você mesmo pode também executar comandos, independemente do adaptador de dados.Isso permite que você passe SQL comandos arbitrários através do adaptador de dados, como aqueles usados para definir ou modificar definições do banco de dados.Você também pode chamar procedimentos armazenados diretamente que não retornam conjuntos de registros — for example, um procedimento armazenado que valida uma entrada de usuário em um banco de dados.Para obter mais informações, consulte Executing a Comando.
Observação de segurança: |
---|
Quando usando comandos de dados com um CommandType conjunto de propriedades como Text, cuidadosamente verifique informações que são enviadas de um cliente antes de transmiti-la ao seu banco de dados. Usuários mal-intencionados podem tentar para enviar (inserir) instruções SQL modificadas ou adicionais em um esforço para obter acesso não autorizado ou danificar o banco de dados.Antes de você transferir a entrada do usuário a um banco de dados, você deve verificar se as informações são válidas; é a melhor prática para sempre usar consultas parametrizadas ou procedimentos armazenados quando possível.Para obter mais informações, consulte Visão Geral de Scripts Maliciosos. |
Parâmetros de comando
Os comandos em um adaptador de dados são geralmente controlados por parâmetro.O comando para a propriedade SelectCommand, por exemplo, geralmente possui um parâmetro na sua cláusula WHERE para que você possa especificar em tempo de execução que registros obter do banco de dados.Os outros comandos usam parâmetros que permitem que você passe em tempo de execução os dados para gravar em um registro e qual registro no banco de dados a ser atualizado.Para obter mais informações sobre como os parâmetros são usados nos adaptadores de dados, consulte Parâmetros em comandos do adaptador de dados.
Lendo e atualizando com adaptadores de dados
O objetivo principal do adaptador de dados é estabelecer comunicação de dados entre um armazenamento de dados e um DataSet.O adaptador suporta métodos específicos para mover os dados de um para outro entre os dois.
Observação: |
---|
Se você apenas deseja ler dados (não atualizá-los), você não precisa armazená-los em um DataSet.Em vez disso, você pode ler diretamente do banco de dados e em um aplicativo.Para obter mais informações, consulte "Dados Somente de leitura" abaixo. |
Você pode usar um adaptador de dados para executar as seguintes operações:
Recuperar linhas de um armazenamento de dados para tabelas de dados correspondentes no conjunto de dados.
Para recuperar linhas em um conjunto de dados, use o método Fill em um objeto adaptador de dados (SqlDataAdapter, OleDbDataAdapter, OdbcDataAdapter, ou OracleDataAdapter).Quando você chama o método Fill, ele transmite uma instrução SQL SELECT para o armazenamento de dados.
Transmitir alterações feitas em uma tabela de conjunto de dados para o armazenamento de dados correspondente.
Para transmitir uma tabela de dataset do dataset para o armazenamento de dados, use o método Update do adaptador.Quando você chama o método, ele executa qualquer instrução SQL INSERT, UPDATE ou DELETE necessária, dependendo se o registro afetado é novo, alterado ou excluído.
Para obter mais informações sobre como as atualizações são executadas usando adaptadores de dados, consulte Atualizando fontes de dados com DataAdapters.
Dados somente de leitura
Se seu programa precisar executar uma passagem sequencial, somente de leitura através de um resultado de consulta, você pode usar um objeto leitor de dados no lugar de preencher um DataSet.Um objeto leitor de dados busca os dados a partir da fonte de dados e os transmite diretamente ao seu aplicativo.Normalmente, objetos leitores de dados são usados para acesso aos dados somente leitura e somente para frente às vezes quando você não precisa fazer cache de dados em um DataSet.(O próprio adaptador de dados usa um objeto leitor de dados para preencher um DataSet.) Um exemplo é uma página de Formulários da Web que exibe informações do banco de dados; como a página de Formulários da Web é recriada com cada processamento, é geralmente inútil armazenar os dados em um DataSet.
Visual Studio fornece quatro objetos leitores de dados, um SqlDataReader, OleDbDataReader, OdbcDataReader, e OracleDataReader.Para obter mais informações sobre como usar o objeto leitor de dados para acesso somente leitura eficiente, consulte Trabalhando com DataAdapters.
Mapeamentos de Tabelas
Por padrão, quando você usa ferramentas do Visual Studio para gerar um conjunto de dados a partir de tabelas de banco de dados, os nomes das tabelas e colunas são os mesmos tanto no DataSet como no banco de dados.No entanto, talvez você considere isso impraticável.Por exemplo, você pode localizar os nomes usados no banco de dados muito concisos ou prolixos; ou os nomes podem estar em um idioma estrangeiro.Se você estiver trabalhando com um esquema existente, você também pode perceber que os nomes definidos no esquema não coincidem com aqueles usados em seu banco de dados.
Portanto, os nomes no banco de dados e DataSet não precisam coincidir.Em vez disso, você pode criar novos nomes de tabela e de coluna no comando do DataSet e em seguida, mapear aqueles para os nomes usados no banco de dados.Adaptadores usam a coleção TableMappings para manter a correspondência entre as estruturas do conjunto de dados (tabelas de dados e colunas de dados) e estruturas do armazenamento de dados (tabelas e colunas).Para obter mais informações sobre mapeamentos de tabela, consulte Mapeamento de tabela em adaptadores de dados.
Consulte também
Tarefas
Como: configurar Parameters for dados Adapters
Como: Mapear dados-fonte Columns to Dataset dados-tabela Columns
Conceitos
Preenchendo um DataSet de um DataAdapter
Criando aplicativos de dados usando Visual Studio