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