Добавление существующих ограничений к набору данныхAdding Existing Constraints to a DataSet

Метод Fill объекта DataAdapter заполняет DataSet только столбцами таблицы и строками из источника данных. Хотя ограничения обычно задаются источником данных, метод Fill по умолчанию не добавляет эти сведения о схеме в набор данных .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. Чтобы заполнить набор данных существующими сведениями об ограничениях первичного ключа из источника данных, можно либо вызвать метод FillSchema объекта DataAdapter, либо задать свойство миссингсчемаактион объекта DataAdapter . до аддвискэй перед вызовом 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. Это обеспечит, чтобы ограничения первичного ключа в наборе данных отражали значения в источнике данных.This will ensure that primary key constraints in the DataSet reflect those at the data source. Сведения об ограничениях внешнего ключа не включаются и должны создаваться явным образом, как показано в разделе ограничения DataTable.Foreign key constraint information is not included and must be created explicitly, as shown in DataTable Constraints.

Добавление сведений о схеме в набор данных перед их заполнением данными гарантирует, что ограничения первичного ключа будут включены в объекты DataTable в наборе данных.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. В результате, когда создаются дополнительные вызовы для заполнения набора данных, сведения о первичном ключевом столбце используются для сопоставления новых строк из источника данных с текущими строками в каждой таблице DataTable, а текущие данные в таблицах перезаписываются данными из Источник данных.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. Без сведений о схеме новые строки из источника данных добавляются к наборуданных, что приводит к дублированию строк.Without the schema information, the new rows from the data source are appended to the DataSet, resulting in duplicate rows.

Примечание

Если столбец в источнике данных определен как автоматически увеличивающийся, метод FillSchema или метод Fill с миссингсчемаактион Аддвискэй, создает DataColumn со свойством AutoIncrement . Задайте значение 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. Тем не менее, необходимо задать значения аутоинкрементстеп и аутоинкрементсид самостоятельно.However, you will need to set the AutoIncrementStep and AutoIncrementSeed values yourself. Дополнительные сведения о столбцах с автоматическим приращением см. в разделе Создание столбцов с автоувеличением.For more information about auto-incrementing columns, see Creating AutoIncrement Columns.

Использование FillSchema или присвоение параметру миссингсчемаактион значения аддвискэй требует дополнительной обработки в источнике данных для определения сведений о первичном ключевом столбце.Using FillSchema or setting the MissingSchemaAction to AddWithKey requires extra processing at the data source to determine primary key column information. Такая дополнительная обработка может снизить производительность.This additional processing can hinder performance. Если сведения о столбцах первичного ключа известны во время разработки, рекомендуется явно задавать столбец или столбцы первичного ключа, чтобы добиться оптимальной производительности.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. Сведения о явном задании сведений о первичном ключе для таблицы см. в разделе Определение первичных ключей.For information about explicitly setting primary key information for a table, see Defining Primary Keys.

В следующем примере кода показано, как добавить сведения о схеме в набор данных с помощью 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");  

В следующем примере кода показано, как добавить сведения о схеме в набор данных с помощью свойства миссингсчемаактион. аддвискэй метода 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");  

Обработка нескольких результирующих наборовHandling multiple result sets

Если объект DataAdapter обнаруживает несколько результирующих наборов, возвращенных из SelectCommand, он создает несколько таблиц в наборе данных.If the DataAdapter encounters multiple result sets returned from the SelectCommand, it will create multiple tables in the DataSet. Таблицам будет присвоено отсчитываемое от нуля имя по умолчанию таблицы N, начинающееся с Table вместо «Table0».The tables will be given a zero-based incremental default name of Table N, starting with Table instead of "Table0". Если имя таблицы передается в качестве аргумента в метод FillSchema , то таблицам будет присвоено отсчитываемое от нуля имя TableName N, начинающееся с TableName вместо "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".

Примечание

Если метод FillSchema объекта OleDbDataAdapter вызывается для команды, возвращающей несколько результирующих наборов, возвращается только информация о схеме из первого результирующего набора.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. При возврате сведений о схеме для нескольких результирующих наборов с помощью OleDbDataAdapterрекомендуется указать миссингсчемаактион аддвискэй и получить сведения о схеме при вызове Fill . Method.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.

См. такжеSee also