Добавление существующих ограничений к DataSet (ADO.NET)

Обновлен: November 2007

Метод Fill объекта DataAdapter заполняет DataSet только столбцами таблицы и строками из источника данных. Хотя источники данных обычно устанавливают ограничения, метод Fill по умолчанию не добавляет эти данные схемы к набору данных DataSet. Чтобы учесть при заполнении набора данных DataSet существующие ограничения первичного ключа, заданные в источнике данных, можно вызвать метод FillSchema объекта DataAdapter или задать значение свойства MissingSchemaAction объекта DataAdapter, равное AddWithKey, перед вызовом метода Fill. Тем самым ограничения первичного ключа в наборе данных DataSet будут соответствовать ограничениям первичного ключа в источнике данных. Данные об ограничениях внешнего ключа не добавляются; их нужно создавать явно, как показано в Ограничения DataTable (ADO.NET).

Добавление данных схемы в DataSet перед его заполнением обеспечивает включение ограничений первичного ключа в объекты DataTable набора данных DataSet. В результате при дополнительных вызовах для заполнения DataSet данные столбца первичного ключа используются для проверки соответствия новых строк из источника данных текущим строкам в каждой таблице DataTable и текущие данные таблиц перезаписываются данными из источника. При отсутствии данных схемы новые строки добавляются из источника данных к набору данных DataSet, что приводит к появлению повторяющихся строк.

49z48hxc.alert_note(ru-ru,VS.90).gifПримечание.

Если столбец в источнике данных определен как столбец автоприращения, метод FillSchema или Fill со свойством MissingSchemaAction, имеющим значение AddWithKey, создает столбец DataColumn, свойство которого AutoIncrement имеет значение true. Но выполнение задачи присваивания значений свойств AutoIncrementStep и AutoIncrementSeed необходимо взять на себя. Дополнительные сведения о столбцах автоприращения см. в разделе Создание столбцов с автоматическим увеличением значения (ADO.NET).

Использование метода FillSchema или присвоение свойству MissingSchemaAction значения AddWithKey требует дополнительной обработки в источнике данных, чтобы определить сведения о столбцах первичного ключа. Такая дополнительная обработка может снизить производительность. Если сведения о столбцах первичного ключа известны во время разработки, рекомендуется явно задавать столбец или столбцы первичного ключа, чтобы добиться оптимальной производительности. Сведения о явной установке данных первичного ключа таблицы см. в разделе Определение первичных ключей (ADO.NET).

В следующем примере кода показано добавление данных схемы в объект DataSet с помощью метода FillSchema.

Dim custDataSet As DataSet = New DataSet()

custAdapter.FillSchema(custDataSet, SchemaType.Source, "Customers")
custAdapter.Fill(custDataSet, "Customers")
DataSet custDataSet = new DataSet();

custAdapter.FillSchema(custDataSet, SchemaType.Source, "Customers");
custAdapter.Fill(custDataSet, "Customers");

В следующем примере кода показано добавление данных схемы в объект DataSet с помощью свойства MissingSchemaAction.AddWithKey метода Fill.

Dim custDataSet As DataSet = New DataSet()

custAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
custAdapter.Fill(custDataSet, "Customers")
DataSet custDataSet = new DataSet();

custAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
custAdapter.Fill(custDataSet, "Customers");

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

Если DataAdapter получит несколько результирующих наборов, возвращенных SelectCommand, в наборе DataSet создается несколько таблиц. Эти таблицы по умолчанию получают имя TableN с последовательно увеличивающимся суффиксом, но начиная с Table, а не с «Table0». Если имя таблицы передается в качестве аргумента методу FillSchema, то таблицы получают имя TableNameN с отсчитываемым от нуля и последовательно увеличивающимся суффиксом, но начиная с TableName, а не с «TableName0».

49z48hxc.alert_note(ru-ru,VS.90).gifПримечание.

Если вызывается метод FillSchema объекта OleDbDataAdapter для команды, возвращающей несколько результирующих наборов, возвращаются только данные схемы из первого результирующего набора. Если данные схемы возвращаются для нескольких результирующих наборов с помощью объекта OleDbDataAdapter, рекомендуется задать свойство MissingSchemaAction со значением AddWithKey и получить данные схемы, вызвав метод Fill.

См. также

Другие ресурсы

Объекты DataAdapter и DataReader (ADO.NET)

Объекты DataSet, DataTable и DataView (ADO.NET)

Получение и изменение данных в ADO.NET