Adicionando restrições existentes a um conjunto de dados
O método Fill do DataAdapter preenche um DataSet somente com colunas e linhas de tabela de uma fonte de dados, embora as restrições sejam normalmente definidas pela fonte de dados, o método Fill não adiciona essas informações de esquema ao DataSet por padrão. Para preencher um DataSet com informações de restrição de chave primária existentes de uma fonte de dados, você pode chamar o método FillSchema do DataAdapter ou definir a propriedade MissingSchemaAction do DataAdapter como AddWithKey antes de chamar Fill. Isso garantirá que as restrições de chave primária no DataSet reflitam aquelas na fonte de dados. As informações de restrição de chave estrangeira não estão incluídas e devem ser criadas explicitamente, conforme mostrado em Restrições de DataTable.
Adicionar informações de esquema a um DataSet antes de preenchê-lo com dados garante que as restrições de chave primária sejam incluídas com os DataTable objetos no DataSet. Como resultado, quando chamadas adicionais para preencher o DataSet são feitas, as informações da coluna de chave primária são usadas para corresponder novas linhas da fonte de dados com linhas atuais em cada DataTable e os dados atuais nas tabelas são substituídos por dados da fonte de dados. Sem as informações do esquema, as novas linhas da fonte de dados são acrescentadas ao DataSet, resultando em linhas duplicadas.
Nota
Se uma coluna em uma fonte de dados for identificada como incremento automático, o método FillSchema ou o método Fill com um MissingSchemaAction de AddWithKey criará um DataColumn com uma propriedade AutoIncrement definida como true
. No entanto, você mesmo precisará definir os valores AutoIncrementStep e AutoIncrementSeed . Para obter mais informações sobre o incremento automático de colunas, consulte Criando colunas de AutoIncremento.
Usar FillSchema ou definir MissingSchemaAction como AddWithKey requer processamento extra na fonte de dados para determinar as informações da coluna de chave primária. Este processamento adicional pode prejudicar o desempenho. Se você souber as informações da chave primária em tempo de design, recomendamos especificar explicitamente a(s) coluna(s) da chave primária para obter o desempenho ideal. Para obter informações sobre como definir explicitamente informações de chave primária para uma tabela, consulte Definindo chaves primárias.
O exemplo de código a seguir mostra como adicionar informações de esquema a um DataSet usando FillSchema:
Dim custDataSet As New DataSet()
custAdapter.FillSchema(custDataSet, SchemaType.Source, "Customers")
custAdapter.Fill(custDataSet, "Customers")
var custDataSet = new DataSet();
custAdapter.FillSchema(custDataSet, SchemaType.Source, "Customers");
custAdapter.Fill(custDataSet, "Customers");
O exemplo de código a seguir mostra como adicionar informações de esquema a um DataSet usando a propriedade MissingSchemaAction.AddWithKey do método Fill:
Dim custDataSet As New DataSet()
custAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
custAdapter.Fill(custDataSet, "Customers")
var custDataSet = new DataSet();
custAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
custAdapter.Fill(custDataSet, "Customers");
Manipulação de vários conjuntos de resultados
Se o DataAdapter encontrar vários conjuntos de resultados retornados do SelectCommand, ele criará várias tabelas no DataSet. As tabelas receberão um nome padrão incremental baseado em zero da Tabela N, começando com Tabela em vez de "Tabela0". Se um nome de tabela for passado como um argumento para o método FillSchema , as tabelas receberão um nome incremental baseado em zero de TableName N, começando com TableName em vez de "TableName0".
Nota
Se o método FillSchema do objeto OleDbDataAdapter for chamado para um comando que retorna vários conjuntos de resultados, somente as informações de esquema do primeiro conjunto de resultados serão retornadas. Ao retornar informações de esquema para vários conjuntos de resultados usando o OleDbDataAdapter, é recomendável especificar um MissingSchemaAction de AddWithKey e obter as informações de esquema ao chamar o método Fill.