Свойство MissingMappingAction
В рассмотренных выше примерах мы определяли названия полей в объекте DataSet для всех заголовков таблицы, извлекаемой из базы данных. Таблица в базе данных может измениться, например, в нее будут добавлены столбцы, которых нет в свойстве TableMappings. Что произойдет в этом случае? Объект DataAdapter имеет свойство MissingMappingAction, предназначенное для таких ситуаций. Его значение по умолчанию - Passthrough (рис. 12.10).
Рис. 12.10. Свойство MissingMappingAction объекта DataAdapter в приложении VisualTableMappings
Для того чтобы разобраться с этим свойством, откроем приложение ProgrammTableMappings, закомментируем пару столбцов в определении TableMappings и добавим программно свойство MissingMappingAction:
... DataColumnMapping[] dcMappings = { new DataColumnMapping("CustomerID", "Номер_клиента"), //new DataColumnMapping("CompanyName", "Компания"), //new DataColumnMapping("ContactName", "Имя"), new DataColumnMapping("ContactTitle", "Должность"), new DataColumnMapping("Address", "Адрес"), new DataColumnMapping("City", "Город"), new DataColumnMapping("Region", "Регион"), new DataColumnMapping("PostalCode", "Индекс"), new DataColumnMapping("Country", "Страна"), new DataColumnMapping("Phone", "Телефон"), new DataColumnMapping("Fax", "Факс"), };
dtMapping.ColumnMappings.AddRange(dcMappings); dataAdapter.TableMappings.Add(dtMapping);
dataAdapter.MissingMappingAction = MissingMappingAction.Passthrough; ...
Запускаем приложение. Мы убрали столбцы "Компания" и "Имя" - при значении по умолчанию Passthrough свойства MissingMappingAction в DataSet помещаются поля с их оригинальными названиями (рис. 12.11):
Рис. 12.11. Вид таблицы при значении Passthrough свойства Missing MappingAction
Изменим значение на Ignore:
dataAdapter.MissingMappingAction = MissingMappingAction.Ignore;
В результате будут игнорироваться столбцы, не указанные в свойстве TableMappings (рис. 12.12):
Рис. 12.12. Вид таблицы при значении Ignore свойства Missing MappingAction
Последнее значение Error:
dataAdapter.MissingMappingAction = MissingMappingAction.Error;
В этом случае сгенерируется исключение, которое может быть перехвачено блоком обработки.