Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a: .NET Framework
.NET
.NET Standard
O ADO.NET DataSet é uma representação residente na memória dos dados que fornece um modelo de programação relacional consistente, independente da fonte de dados. O DataSet representa um conjunto completo de dados que inclui tabelas, restrições e relações entre as tabelas. Como o DataSet é independente da fonte de dados, pode DataSet incluir dados locais para a aplicação e dados de múltiplas fontes de dados. A interação com fontes de dados existentes é controlada através do DataAdapter.
A SelectCommand propriedade do DataAdapter é um Command objeto que recupera dados da fonte de dados. Os InsertCommand, UpdateCommand e DeleteCommand são propriedades do DataAdapter, que são objetos Command que gerem as atualizações dos dados na fonte de dados de acordo com as modificações feitas aos dados no DataSet. Estas propriedades são abordadas com mais detalhe em Atualizar Fontes de Dados com DataAdaptadores.
O Fill método do DataAdapter é usado para preencher a DataSet com os resultados do SelectCommand do DataAdapter.
Fill toma como argumentos a DataSet para ser preenchido, e um DataTable objeto, ou o nome do DataTable para ser preenchido com as linhas devolvidas do SelectCommand.
Observação
Usar o DataAdapter para recuperar toda uma tabela leva tempo, especialmente se houver muitas linhas na tabela. Isto porque aceder à base de dados, localizar e processar os dados, e depois transferi-los para o cliente é demorado. Puxar toda a tabela para o cliente também bloqueia todas as linhas do servidor. Para melhorar o desempenho, pode usar a WHERE cláusula para reduzir significativamente o número de linhas devolvidas ao cliente. Também pode reduzir a quantidade de dados devolvidos ao cliente listando apenas explicitamente as colunas obrigatórias na SELECT declaração. Outra boa solução é recuperar as linhas em lotes (como várias centenas de linhas de cada vez) e só recuperar o lote seguinte quando o cliente terminar o lote atual.
O Fill método usa o DataReader objeto implicitamente para devolver os nomes das colunas e tipos que são usados para criar as tabelas no DataSet, e os dados para preencher as linhas das tabelas no DataSet. Tabelas e colunas só são criadas se ainda não existirem; caso contrário Fill , usa o esquema existente DataSet . Os tipos de coluna são criados como tipos do .NET Framework de acordo com as tabelas em Mapeamentos de Tipos de Dados no ADO.NET. As chaves primárias não são criadas a menos que existam na fonte de dados e DataAdapter.MissingSchemaAction esteja definido para MissingSchemaAction.AddWithKey. Se Fill verificar que existe uma chave primária para uma tabela, irá sobrescrever dados em DataSet com dados da fonte de dados para linhas onde os valores das colunas da chave primária coincidirem com os da linha devolvida da fonte de dados. Se não for encontrada nenhuma chave primária, os dados são anexados às tabelas no DataSet.
Fill utiliza quaisquer mapeamentos que possam existir quando preencher os DataSet (ver DataAdapter, DataTable e DataColumn Mapings).
Observação
Se o SelectCommand devolver os resultados de uma JUNÇÃO EXTERIOR, o DataAdapter não define um PrimaryKey valor para o resultado DataTable. Deve definir o PrimaryKey você mesmo para garantir que as linhas duplicadas sejam resolvidas corretamente.
O exemplo de código seguinte cria uma instância de um SqlDataAdapter que utiliza um SqlConnection para a base de dados Microsoft SQL Server Northwind e preenche uma DataTable num DataSet com a lista de clientes. A instrução SQL e os argumentos SqlConnection passados para o construtor SqlDataAdapter são usados para criar a propriedade SelectCommand do SqlDataAdapter.
Example
// Assumes that connection is a valid SqlConnection object.
string queryString =
"SELECT CustomerID, CompanyName FROM dbo.Customers";
SqlDataAdapter adapter = new SqlDataAdapter(queryString, connection);
DataSet customers = new DataSet();
adapter.Fill(customers, "Customers");
Observação
O código mostrado neste exemplo não abre nem fecha explicitamente o Connection. O Fill método abre implicitamente o Connection que o DataAdapter está a usar se encontrar que a ligação ainda não está aberta. Se Fill abrir a ligação, também fecha a ligação quando Fill termina. Isto pode simplificar o seu código quando lida com uma única operação, como um Fill ou um Update. No entanto, se estiver a realizar múltiplas operações que requerem uma ligação aberta, pode melhorar o desempenho da sua aplicação chamando explicitamente o Open método do Connection, realizando as operações contra a fonte de dados, e depois chamando o Close método do Connection. Deve-se tentar manter as ligações à fonte de dados abertas pelo menor tempo possível para libertar recursos para o uso por outras aplicações clientes.
Vários conjuntos de resultados
Se o DataAdapter encontrar múltiplos conjuntos de resultados, ele cria múltiplas tabelas no DataSet. As tabelas recebem um nome por defeito incremental, TabelaN, começando por "Tabela" para a Tabela0. Se um nome de tabela for passado como argumento para o Fill método, as tabelas recebem um nome por defeito incremental de NomeTabelaN, começando por "NomeTabla" para NomeTabla0.
Preencher um DataSet a partir de múltiplos DataAdapters
Qualquer número de DataAdapter objetos pode ser usado com um DataSet. Cada um DataAdapter pode ser usado para preencher um ou mais DataTable objetos e resolver atualizações de volta à fonte de dados relevante.
DataRelation e Constraint objetos podem ser adicionados ao DataSet localmente, o que permite relacionar dados de fontes de dados diferentes. Por exemplo, pode DataSet conter dados de uma base de dados Microsoft SQL Server, uma base de dados IBM Db2 exposta através do OLE DB e uma fonte de dados que transmite XML. Um ou mais DataAdapter objetos podem gerir a comunicação com cada fonte de dados.
Example
O exemplo de código seguinte preenche uma lista de clientes da Northwind base de dados no Microsoft SQL Server e uma lista de encomendas da Northwind base de dados armazenada no Microsoft Access. As tabelas preenchidas estão relacionadas com um DataRelation, e a lista de clientes é então exibida com as encomendas desse cliente.
// Assumes that customerConnection and orderConnection are valid SqlConnection objects.
SqlDataAdapter custAdapter = new SqlDataAdapter(
"SELECT * FROM dbo.Customers", customerConnection);
SqlDataAdapter ordAdapter = new SqlDataAdapter(
"SELECT * FROM Orders", orderConnection);
DataSet customerOrders = new DataSet();
custAdapter.Fill(customerOrders, "Customers");
ordAdapter.Fill(customerOrders, "Orders");
DataRelation relation = customerOrders.Relations.Add("CustOrders",
customerOrders.Tables["Customers"].Columns["CustomerID"],
customerOrders.Tables["Orders"].Columns["CustomerID"]);
foreach (DataRow pRow in customerOrders.Tables["Customers"].Rows)
{
Console.WriteLine(pRow["CustomerID"]);
foreach (DataRow cRow in pRow.GetChildRows(relation))
Console.WriteLine("\t" + cRow["OrderID"]);
}
SQL Server Tipo Decimal
Por defeito, armazena os dados no DataSet usando os tipos de dados .NET. Para a maioria das aplicações, estes fornecem uma representação conveniente da informação da fonte de dados. No entanto, esta representação pode causar problemas quando o tipo de dado na fonte de dados é um tipo decimal ou numérico SQL Server. O tipo de dados .NET decimal permite um máximo de 28 dígitos significativos, enquanto o tipo de dados SQL Server decimal permite 38 dígitos significativos. Se o SqlDataAdapter determinar, durante uma operação Fill, que a precisão de um campo SQL Server decimal é superior a 28 dígitos, a linha atual não é adicionada ao DataTable. Em vez disso, ocorre o evento FillError, que lhe permite determinar se ocorrerá uma perda de precisão e responder adequadamente. Para mais informações sobre o evento FillError, consulte Manipular Eventos do DataAdapter. Para obter o valor do SQL Server decimal , também podes usar um SqlDataReader objeto e chamar o GetSqlDecimal método.
ADO.NET inclui também suporte reforçado para System.Data.SqlTypes no DataSet. Para mais informações, consulte SqlTypes e o DataSet.