Fill(DataTable)

Метод Fill(DataTable) получает строки из источника данных с помощью оператора SELECT, указанного в свойстве SelectCommand. Объект соединения, связанный с оператором SELECT, должен быть допустимым, но открывать его не требуется. Если соединение с ЛИНТЕР-сервером было закрыто до вызова метода Fill(DataTable), то оно автоматически открывается для извлечения данных, а затем также автоматически закрывается. Если соединение было открыто до вызова метода Fill(DataTable), то оно остается открытым.

Метод Fill(DataTable) добавляет строки в целевые объекты DataTable в DataSet, создавая объекты DataTable, если они еще не существуют. При создании объектов DataTable метод Fill(DataTable) обычно загружает метаданные только об имени столбца. Однако если свойство MissingSchemaAction имеет значение AddWithKey, то также загружаются метаданные о первичных ключах и ограничениях целостности.

Если объект DbDataAdapter обнаруживает дублированные столбцы при заполнении объекта DataTable, то он создает имена для последующих столбцов, используя шаблон «имя столбца»1, «имя столбца»2, «имя столбца»3 и т.д., где «имя столбца» – имя дублируемого столбца. Если входные данные содержат неименованные столбцы, они помещаются в объект DataSet в соответствии с шаблоном «столбец1», «столбец2» и т.д. При добавлении нескольких наборов результатов в объект DataSet каждый из них помещается в отдельную таблицу.

Метод Fill(DataTable) может использоваться несколько раз для одного и того же объекта DataTable. Если существует первичный ключ, входящие строки объединяются с соответствующими строками, которые уже существуют.

Если первичный ключ отсутствует, входящие строки добавляются в конец объекта DataTable.

Если свойство SelectCommand возвращает результаты соединения таблиц (OUTER JOIN), то объект DataAdapter не задает значение свойства PrimaryKey для результирующего объекта DataTable. Необходимо явно определить первичный ключ, чтобы убедиться в том, что дублированные строки разрешены правильно.

Примечание

Если обрабатываемый пакет SQL-операторов возвращает несколько наборов результатов, то метод Fill(DataTable) и FillSchema ADO.NET-провайдера СУБД ЛИНТЕР извлекает сведения о схеме только для первого набора результатов.

Синтаксис
public int Fill(DataTable dataTable);

dataTable – объект DataTable, в который необходимо загрузить данные.

Возвращаемое значение

Количество строк, реально добавленных или обновленных в объекте DataSet.

Исключения
LinterSqlException Код завершения СУБД ЛИНТЕР не равен 0.
Примеры

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

Если при вызове метода Fill в объекте DataSet содержит только один объект DataTable, имя которого отличается только регистром, этот объект DataTable обновляется.

1) В этом примере создается новая таблица, т.к. в DataSet уже есть несколько таблиц с похожими именами и трудно выбрать, какая из них может быть обновлена (т.е. регистр учитывается)

DataSet dataset = new DataSet();
 dataset.Tables.Add("aaa");
 dataset.Tables.Add("AAA");
//Заполнение таблицы "aaa", которая уже существует в DataSet.
 adapter.Fill(dataset, "aaa");
// Создание в DataSet новой таблицы с последующим заполнением её  данными
 adapter.Fill(dataset, "Aaa");

2) В этом примере новая таблица не создается, т.к. в DataSet есть только одна таблица с похожим именем и проблемы с выбором таблицы обновления нет (т.е. регистр не учитывается)

DataSet dataset = new DataSet();
dataset.Tables.Add("aaa");
// Заполняется таблица "aaa", потому что в DataSet есть только одна таблица с похожим именем
adapter.Fill(dataset, "AAA");