2. Щелкните на пиктограмме с изображением знака "плюс", раскроется список ссылок на две таблицы объекта DataSet.
3. Щелкните на ссылке Customers, и в сетке будут отображены данные из таблицы tblCustomers. Обратите внимание, что каждая строка в таблице tblCustomers имеет кнопки с изображением знака "плюс" с левой стороны, что означает связь этой таблицы с другими таблицами. После щелчка на такой кнопке раскрывается список объектов DataRelations для данной таблицы. В нашем примере имеется только одна ссылка для отношения Customer_Orders, созданного в подпрограмме btnFillClick (рис. 6.6).
РИС. 6.6. Ссылка Customer_Orders для первой записи из таблицы Customers
4. Щелкните на ссылке Customer_Orders в первой записи. На основании определения отношения Customer_Orders будут вставлены и отображены записи из таблицы Orders, которые относятся к текущей записи из таблицы Customers.
НА ЗАМЕТКУ
При переходах между разными таблицами и отношениями можно всегда вернуться исходному положению в используя кнопку Navigates back to the parent rows (Обратный переход к родительским записям) с изображением стрелки в правом верхнем углу формы.
Теперь с помощью этой формы пользователи могут просматривать имеющиеся и вводить новые данные. При вводе новой дочерней записи значение 1 в поле указывается автоматически, потому что сетка способна определить его в связанной записи из родительской таблицы. Продолжим и добавим значения для полей OrderDate и Amount. При этом не нужно задавать значение для поля ID, потому что это идентификационное поле, которому значение присваивается автоматически.
5. Щелкните на кнопке Update для выполнения подпрограммы btnUpdate_Click из листинга 6.7, которая вносит указанные изменения данных в базу данных.
6. Чтобы проверить корректность внесенных изменений, щелкните на кнопке Fill для повторной загрузки информации из базы данных в объект DataSet и сетку. Откройте первую запись таблицы Customers и найдите ее дочерние записи. Убедитесь в том, что среди них находится введенная вами дочерняя запись.
Попробуйте внести дополнительные изменения в базу данных вставляя, удаляя и изменяя записи в обеих таблицах и проверяя выполнение обновлений.
НА ЗАМЕТКУ
Успешное удаление записи из родительской таблицы Customer вместе с ее дочерними записями из таблицы Orders возможно благодаря заданному по умолчанию ограничению ForeignKeyConstraint для отношения Customer_Orders, которое заключается в каскадном обновлении (удалении) данных в родительской и дочерней таблицах.
В этой главе рассмотрен объект DataAdapter, который является одним из основных объектов модели ADO.NET. Он играет роль моста между неподключенными объектами DataSet (и связанными с ними объектами) и подключенными объектами DataProvider, которые фактически связаны и подключены к физическому источнику данных.
Объект DataAdapter используется для вставки данных в объект DataSet из источника данных с помощью явно заданных команд или хранимых процедур. Объект DataAdapter также автоматически обновляет источник данных теми изменениями, которые произошли в объекте DataSet, что позволяет полностью настроить команды вставки, обновления и удаления для источника данных.
Иногда требуется программно создать и вставить в набор несколько записей, а затем внести эти обновления в базу данных. В модели ADO 2.X можно создать набор записей, но нельзя обновить базу данных. А как обстоит дело в модели ADO.NET?
В модели ADO.NET это требование реализуется очень просто. Как отмечалось в главе 5, "ADO.NET: объект DataSet", объект DataSet является контейнером данных, который не зависит от фактически используемого источника данных. Для обновления базы данных изменениями из объекта DataSet достаточно только подключиться к уже сконфигурированному объекту DataAdapter и вызвать его метод Update, который фактически обновит базу данных. Это верно и для программно созданных объектов DataSet, а не только для созданных с помощью команды Select объектов DataAdapter. В момент готовности к внесению изменений в физический источник данных достаточно подключиться к сконфигурированному объекту DataAdapter и вызвать его метод Update.
ГЛАВА 7
ADO.NET: дополнительные компоненты
В предыдущих главах рассматривается архитектура модели доступа к данным ADO.NET, объекты модели ADO.NET, их основные свойства и методы. В данной главе описываются четыре дополнительных компонента модели ADO.NET, которые имеют огромное значение для создания профессиональных приложений.
Читать дальше