Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ADO как базовый объект доступа.doc
Скачиваний:
16
Добавлен:
15.12.2018
Размер:
1.48 Mб
Скачать

1.4.5. Свойство TableMappings объекта DataAdapter

Когда DataAdapter считывает записи из источника данных, должно быть определено, как разместить полученную информацию в соответствующей таблице объекта DataSet. Это определяется схемой таблицы (table mapping). В такой схеме связываются между собой имена колонок таблицы источника данных с именами колонок таблицы набора данных DataSet. Например, информация из колонки с именем au_id в таблице источника данных может принадлежать колонке с именем author_id_number в таблице объекта DataSet.

По умолчанию, когда Visual Studio генерирует объект DataSet, элементы набора данных (таблицы и колонки) имеют те же самые имена, что и в источнике данных. Однако в некоторых ситуациях имена в источнике данных и наборе данных DataSet могут не совпадать.

  • Набор данных был создан на основе существующей схемы, в которой использовались различные имена.

  • Разработчик изменил имена элементов набора данных для удобочитаемости, для перевода наименований с одного языка на другой или подругой причине.

Сформировать или модифицировать структуру таблицы можно, используя свойство TableMappings адаптера данных, которое включает в себя коллекцию элементов DataTableMapping. Есть только один объект DataTableMapping для каждой отображаемой таблицы, потому что DataAdapter связывает только единственную исходную таблицу и единственную таблицу набора данных. Доступ к этому свойству можно получить из окна Properties объекта DataAdapter (рис. 1.12).

При нажатии на кнопку в поле (Collection) свойства TableMappings появляется диалоговое окно, позволяющее редактировать элементы коллекции DataTableMapping (рис. 1.13). Здесь содержатся свойства для идентификации таблицы источника данных и таблицы набора данных, а так же свойство ColumnMappings, содержащее элементы, которые представляют колонки соответствующих таблиц.

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

1. Адаптер данных ищет название каждого столбца исходной таблицы в объекте TableMappings.

  1. Когда адаптер данных находит название столбца исходной таблицы, то получает название соответствующего ему столбца таблицы набора данных.

  2. Получив имена этих двух столбцов, DataAdapter переносит данные от исходного столбца базовой таблицы в соответствующий столбец таблицы набора данных DataSet.

Есть две причины, которые могут воспрепятствовать данному процессу.

□ Не найдена информация об исходном столбце. Это может произойти потому, что он не описан в схеме таблицы (например, разработчик изменил структуру исходной таблицы базы данных после того, как был сформирован объект DataAdapter).

□ Столбец, в который нужно переместить данные, не определен в схеме набора данных.

Возникновение описанных выше ситуаций не приводит к критической ошибке, и адаптер может заполнять набор данных. Однако это уже некорректная работа с данными и на нее программа должна реагировать должным образом. Для этих целей адаптер данных поддерживает два свойства, которые позволяют запрограммировать действия, которые нужно выполнить, когда возникнет любая из этих двух ситуаций.

Свойство MissingMappingAction позволяет определить, какое действие адаптер должен выполнить, если в схеме данных отсутствуют некоторые параметры. Данное свойство имеет следующие значения:

  • Passthrough — адаптер пытается загрузить данные исходного столбца в столбец с тем же именем набора данных. Если в наборе данных нет столбца с аналогичным именем, поведение программы в дальнейшем будет зависеть от параметров свойства MissingSchemaAction (см. ниже);

  • Ignore — столбцы, которые должным образом не описаны в схеме, не загружаются данными и остаются пустыми;

  • Error - генерируется ошибка.

Свойство MissingSchemaAction позволяет определять действия, которые должны быть выполнены в случае, когда адаптер не находит соответствующий столбец для записи данных. Возможные следующие значения:

□ Add — таблица или столбец добавляются к схеме и к набору данных;

□ AddWithKey — таблица или столбец добавляются к набору данных и к схеме, причем добавленный столбец делается ключевым;

□ Ignore — таблица или столбец, не представленные в схеме набора данных не добавляются к набору данных;

□ Error — генерируется ошибка.

Необходимо установить оба этих свойства, чтобы обеспечить устойчивость работы приложения. Например присвоение свойству MissingMappingAction значения Passthrough и свойству MissingSchemaAction значения Add обеспечит эффект автоматического дублирования таблицы источника в наборе данных DataSet.

Можно настроить свойства таким образом, что приложение будет генерировать ошибку, если есть какое-то несоответствие между базовой таблицей и схемой набора данных, что предотвратит некорректную обработку информации.

Если задается режим игнорирования ошибки, то обеспечивается гарантированная загрузка тех данных, которые явно определены в схеме или отображены в свойстве TableMappings. Это полезно использовать тогда, когда адаптер данных обращается к хранимой процедуре или SQL-запросу, которые возвращают больше столбцов, чем определено в наборе данных DataSet.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]