Adicionar restrições existentes a um DataSetAdding Existing Constraints to a DataSet

O método Fill do DataAdapter preenche um DataSet somente com colunas de tabela e linhas 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.The Fill method of the DataAdapter fills a DataSet only with table columns and rows from a data source; though constraints are commonly set by the data source, the Fill method does not add this schema information to the DataSet by default. Para popular um conjunto de dados com informações de restrição de chave primária existentes de uma fonte, você pode chamar o método FillSchema do DataAdapter ou definir a propriedade MissingSchemaAction do DataAdapter como AddWithKey antes de chamar Fill.To populate a DataSet with existing primary key constraint information from a data source, you can either call the FillSchema method of the DataAdapter, or set the MissingSchemaAction property of the DataAdapter to AddWithKey before calling Fill. Isso fará com que as restrições de chave primária do DataSet reflitam as restrições da fonte de dados.This will ensure that primary key constraints in the DataSet reflect those at the data source. 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.Foreign key constraint information is not included and must be created explicitly, as shown in DataTable Constraints.

A adição de informações de esquema a um DataSet antes de preenchê-lo com os dados desejados faz com que as restrições de chave primária sejam incluídas com os objetos DataTable no DataSet.Adding schema information to a DataSet before filling it with data ensures that primary key constraints are included with the DataTable objects in the DataSet. Como resultado, quando as chamadas adicionais para preencher o DataSet são feitas, as informações da coluna de chave primária são usadas para fazer a correspondência de novas linhas da fonte de dados com as linhas atuais de cada DataTable, e os dados atuais das tabelas são substituídos pelos dados da fonte de dados.As a result, when additional calls to fill the DataSet are made, the primary key column information is used to match new rows from the data source with current rows in each DataTable, and current data in the tables is overwritten with data from the data source. Sem as informações do esquema, as novas linhas da fonte de dados são acrescentadas ao DataSet, resultando em linhas duplicadas.Without the schema information, the new rows from the data source are appended to the DataSet, resulting in duplicate rows.

Observação

Se uma coluna em uma fonte de dados for identificada como incrementação automática, o método FillSchema ou o método Fill com um MissingSchemaAction de AddWithKey, criará uma DataColumn com uma propriedade AutoIncrement definida como true .If a column in a data source is identified as auto-incrementing, the FillSchema method, or the Fill method with a MissingSchemaAction of AddWithKey, creates a DataColumn with an AutoIncrement property set to true. No entanto, você precisará definir os valores de AutoIncrementStep e AutoIncrementSeed por conta própria.However, you will need to set the AutoIncrementStep and AutoIncrementSeed values yourself. Para obter mais informações sobre colunas de incrementação automática, consulte criando colunas de incrementoautomático.For more information about auto-incrementing columns, see Creating AutoIncrement Columns.

O uso do FillSchema ou a definição do MissingSchemaAction como AddWithKey requer processamento extra na fonte de dados para determinar as informações da coluna de chave primária.Using FillSchema or setting the MissingSchemaAction to AddWithKey requires extra processing at the data source to determine primary key column information. Esse processamento adicional pode prejudicar o desempenho.This additional processing can hinder performance. Se você souber as informações de chave primária em tempo de design, recomendamos especificar explicitamente a coluna (ou colunas) de chave primária, a fim de alcançar um desempenho ideal.If you know the primary key information at design time, we recommend that you explicitly specify the primary key column or columns in order to achieve optimal performance. Para obter informações sobre como definir explicitamente informações de chave primária para uma tabela, consulte definindo chaves primárias.For information about explicitly setting primary key information for a table, see Defining Primary Keys.

O exemplo de código a seguir mostra como adicionar informações de esquema a um conjunto de dados usando FillSchema:The following code example shows how to add schema information to a DataSet using 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 conjunto de dados usando a propriedade MissingSchemaAction. AddWithKey do método Fill :The following code example shows how to add schema information to a DataSet using the MissingSchemaAction.AddWithKey property of the Fill method:

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");  

Manipulando vários conjuntos de resultadosHandling multiple result sets

Se o DataAdapter encontrar vários conjuntos de resultados retornados do SelectCommand, ele criará várias tabelas no conjunto de linhas.If the DataAdapter encounters multiple result sets returned from the SelectCommand, it will create multiple tables in the DataSet. As tabelas receberão um nome padrão incremental partindo do zero correspondente a Tabela N, começando apenas com Tabela em vez de "Table0".The tables will be given a zero-based incremental default name of Table N, starting with Table instead of "Table0". Se um nome de tabela for passado como um argumento para o método FillSchema , as tabelas receberão um nome incremental com base em zero de TableName N, começando com TableName em vez de "TableName0".If a table name is passed as an argument to the FillSchema method, the tables will be given a zero-based incremental name of TableName N, starting with TableName instead of "TableName0".

Observação

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.If the FillSchema method of the OleDbDataAdapter object is called for a command that returns multiple result sets, only the schema information from the first result set is returned. Ao retornar informações de esquema para vários conjuntos de resultados usando o OleDbDataAdapter, é recomendável que você especifique um MissingSchemaAction de AddWithKey e obtenha as informações de esquema ao chamar o método Fill .When returning schema information for multiple result sets using the OleDbDataAdapter, it is recommended that you specify a MissingSchemaAction of AddWithKey and obtain the schema information when calling the Fill method.

Confira tambémSee also