Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Вебмастеру -> Сеппа Д. -> "Microsoft ADO.NET" -> 185

Microsoft ADO.NET - Сеппа Д.

Сеппа Д. Microsoft ADO.NET — М.: Русская Редакция, 2003. — 640 c.
ISBN 5-7502-0223-2
Скачать (прямая ссылка): mcrsftado2003.pdf
Предыдущая << 1 .. 179 180 181 182 183 184 < 185 > 186 187 188 189 190 191 .. 260 >> Следующая

424 Часть III Автономная работа с данными: объект DataSet модели ADO.NET
Orders
:' OfdenD Custo merit) EmployeelD ; OrderDate
10268 GROSR 8 7/30/1996
10785 GROSR 1 12/18/1997
-1 GROSR 7 1/14/2002
-2 GROSR 7 1/14/2002

Order Details
¦ ProductlD QuanSitv UnirPrSce
10268 29 10 99,00
102668 72 4 27.S0
10785 10 10 31.00
10785 75 10 7.75
-1 1 12 18.00
-1 67 24 14.00
-2 4 6 22.00
-2 65 8 21.05
Рис. 11-4. Объект DataSet с записями о заказах и заказанных товарах, ожидающими передачи в БД
Для успешной передачи записей следует передать новые записи о заказах, получить для них новые значения лнтоипкредаи-з. добавить их в соответствующие записи о заказанных товарах и затем передать новые записи о заказанных товарах в БД. На первый взгляд данный процесс кажется сложным, но в действительности он прост.
Вы уже умеете передавать в БД новые записи о заказах. Если требуется передать только их, вызовите метод Select объекта DataTable с информацией о заказах, как описывалось ранее. Выбрать новые значения автоинкремента можно любым из известных вам способов.
Но как добавить эти значения в новые записи о заказанных товарах'' Фактически делать вам что-либо не требуется. ADO.NET выполнит всю необходимую работу, используя объект DataRelation. По умолчанию объект DataRelation каскадирует изменения через объект DataSet. Если в объекте DataSet есть DataRelation,
определяющий отношение между объектами DataTable Orders и Order Details, после передачи новых записей о заказах в БД объект сразу же каскадирует
новое значение автоинкремента в объект DataTable с информацией о заказанных товарах (рис. 11-5).
ГЛАВА 11 Сложные случаи обновления данных , 25
Orders
; Order! D CustomerlD EmployeelD
10268 GRQSR 8 7/30/1996
10785 GROSR 1 12/18/1997
12000 GROSR 7 1/14/2002
12001 GROSR 7 1/14/2002
Order Details
OfdedP Quam,;, ; . Un.tPftce ¦
10268 29 10 99.00
10268 72 4 27.80
10785 10 10 31,00
10785 75 10 7.75
12000 1 12 18.00
12000 67 24 14.00
12001 4 t 22.00
12001 65 В 21.05
Рис. П-5. Каскадирование в иерархии значений автоинкремента в дочернюю таблицу
Как только у новых записей объекта Order Details обновятся значе-
ния поля OrderlD, эти записи можно будет успешно передать в БД. Благодаря функциональности объекта DataRelation. каскадирование новых значений автоинкремента в иерархии — простейшая часть процесса передачи иерархииых изменений.
Изоляция и повторная интеграция изменений
Предположим, вы создаете многоуровневое приложение с пользовательским '-S'in-dows-интерфейсом, обращающееся к БД через Web-сервис. Web-сервис возвращает клиентам объекты DataSetc запрошенной ими информацией. Клиентское приложение позволяет пи.чь.юиатопо изменять содержимое DataSet. После того как пользователь внес необходимые изменения и щелкнул кнопку, клиент передаст изменения в БД через Web-сервис. Простейший способ сделать это — передать Web-сервису объект DataSet и заставить сервис с помощью объектов DataAdapter передать изменения БД.
•5-!595В
426 Часть Ml Автономная работа с данными: объект DataSet модели A30.NET
Для максимальной ii|>( >i[:siin;u I i47ii.ii'-!i"i ¦ s !Г|->ил<иксиия следует оптимизировать использование полосы ир;>т ог.пшп Чем меньше данных передается между клиентским приложением и быстрее выполняется приложение.
Ограничение объема данных, возвращаемых Web-сервисом, - достаточно простая и интуитивно ре таем;; я задача. Если ваши таблицы содержат тысячи и миллионы :ч;1шю.:п. учтите это в архитектуре сервиса и не 1Ю.<11р;мц;|п le содержимое таблиц полностью; в ооот^.шом случае приложения ощутимо снизится. Убедитесь также, что Web-сервис возвращает только необходимые клиентскому приложению данные,
А что если ограничить объем i.....и ¦. передаваемых клиентским приложением Web-сервису? Для передачи изменении в БД можно передать Web-сервису объект DataSet. Но если назначение сервиса — вносить изменения в БД, передавать ему все содержимое DataSet не нужно. Если DataSet включает несколько сотен запи-ееп и пользователь изменил только пару из imx, передача всего содержимого DalaSelWeb-сервису окажется весьма iк jojcjiei. 1 мшюм. Как можно усовершенствовать данный процесс?
Экономное использование полосы пропускания при помощи метода GetChanges
Объекты DataSet и DataTable предоставляют перегруженный метод GetChanges. Метод Па1а5е1.СеЮ.нпще5\юзърт\ж\ новый объект DataSet, по структуре соотнет-ствующий оригинальному объекту, но только измененные записи из
оригинального DataSet.
Если для передачи изменений в БД вы вызываете Web-сервис, можно значительно повысить производительность, предварительно вызвав метод DataSet.Get-Cbaugesn вернув изменения Web-сервису.
Примечание Говоря, что метод DaiuSei.Cel- .о<шуе: возвращает новый объект DataSet, содержащий только измененные записи, я слегка приукрасил прайду. Новый объект DataSet. возвращаемый методом GetChanges, по структуре соответствует оригинальному DataSet и содержит ные вами измененные записи. Однако, кроме того, он может содержать и некоторые другие записи, необходимые для поддержания ссылочной целостности. Предположим, например, что у вас есть DataSet, включающий объекты DataTable с информацию о клиентах и заказах, а также <н'ч,ск1 DataRelation, определяющий отношение между двумя DataTable, Если вы добавите несколько заказов и затем вызовете метод Data-
Предыдущая << 1 .. 179 180 181 182 183 184 < 185 > 186 187 188 189 190 191 .. 260 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100