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

 

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

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

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

Set.GetChanges, возвращенный объект будет содержать эти новые записи, а также соответствующие записи из таблицы DataTable с информацией о клиентах. В противном случае новый объект DataSet нарушил бы ограничение, aia.*;H!Iюс с (hwm<)м DataRelation.
Я уже рассказывал, какрег.д.гзона'п при обновлении ' >гп пмпеп он \, >с управление параллелизмом на основе полей типа пшем.ппр. В многоуровневом приложении этот процесс несколько усложняется. Предположим, в логике обновления объекта Оя/аЛягфЧег. используемого АУеЪ-сервисом, реализовано оптимистичное
ГЛАВА t Сложные случаи обновления данных
427
управление параллелизмом на основе полей типа timestamp. Вы также nirin. Меновые значения timestamp одним из описанных ранее методов. Но что произошло с этими значениями?
Вы выбрали новые значения и поместили их в объект DataSet Web-cepKWa i. >.hi:J!3i это — поличным, отдельный от используемого в клиентском приложении объект DataSet. Как поместить новые значения timestamp в объект DataSet клиентского приложения?
Можно просто заставить Web-сервис возвращать новый объект DataSet, содержащий те же данные, что и клиентское приложение. Но хотя этот способ и гарантирует данных клиентского приложения, он не обеспечивает оптимального использования полосы пропускания.
Более экономное решение (рис. 11-6) — :<;нт.ишть ЧХч-Ьч.ч-рнпс возвращать полученный им объект DataSet, включив в него полученные новые значения time-stamp,
Однако таким образом решается лишь часть проблемы. Гепорг у клиентского приложения есть новые значения timestamp, но как DataSet, воз-
вращаемый Web-сервисом, с объектом ВаШМ клиентского приложенщ?
Основн# обьвд BetsSst с оригинальными данным
CustprrierfD . OompanyNama ¦ GontactSffiBs ; TSCol : ;
ALFKI Alfreds Fytterkiste Maria Anders Оригинальное значение>
ANATR Anairujillo AnaTrujiflo значение>
ANUNT Moreno Antonio Moreno Оригинальное значение>
AR0UT the Thomas оригинальное значение>
Основной o6fc«rr DataSet с измененными &ж?т
. CustomeflD ContadName TSCo!
ftUHd Alfreds :::.t;ra.- Hew Contact #1 Оригинальное значением
ANATR AnaTrujillo АпаТгщШо Оригинальное эначение>
ANTON Antonio Antonio Moreno (Оригинальное значение>
AROUT Агодей Hie Horn Mew К Оригинальное значение>

Объект и переданный Web-сервису
UisiomerlD: : :Cortatmme ¦ ¦ TSCul
ALTO .. Alfreds Futterkiste Шю Contact fl «Оригинально* 1наздние>
ДЙЙОГ Aroiind trie Hern New Сшпай t'2 Оригинальное значением
Рис. 11-6. Возвращение новых сгенерированных сервером значений при помощи Web-сервиса
428
Часть III работа с данными: объект DataSet модели
Метод Merge объекта DataSet
Простейшее решение воспользоваться методом объекта DataSet. Он по-
зволяет объединить содержимое имеющегося DataSet с содержимым другого объекта DataSet, DataTable или массива объектов DataROW. Принцип данной функциональности проиллюстрирован на рис. і I ¦".
Основной
СрШгапА GojtwmB-
АІ 81
А2 82
DataTable
CuijmrtC Column!}
С1 Р1
С2 D2
Основной объект ОзХаШъ после вызова метода
¦ 'ШШк Соїитпй CotumnC CijiumnD .
А1 11 (null) (null)
А2 вг (null) (null)
(null) (ти) Gl D1
(huff) (null) C2 D2
Рис. 11 -7. Пример результатов вызова метода Merge объекта DataSet
Каждый объект DataSet изначально содержит по одному объекту DataTable с одинаковым именем. После того как вы m.i.'icint тс метод Л;;.'.1!;- основного объекта DataSet и передадите ему второй объект DataSet. основной DataSet будет содержать все оригинальные столбцы, а также столбцы второго DataSet. Кроме ТОГО, основной DataSet будет содержать записи из второго объекта DataSet.
Тем не менее этот пример не особенно полезен. Очень мало разработчиков станут совмещать два объекта DataSet, включающих объекты DataTable с одинаковым именем и совершенно разными структурами. На рис. 11-8 показан более типичный пример. Два объекта DataSet содержат объекты DataTable с идентичными структурами. Поле первичного ключа обоих Объектов Data table — ID.
После вызова метода Merge основной объект DataSet содержит дополнительный столбец из второго DataSet. Содержимое основного DataSet также изменится в результате вызова метода Merge. В предыдущем примере данный метод просто добавил имеющиеся записи в основной DataSet. Здесь он выполняет слияние
содержимого двух объектов DataSet.
Отличие данного примера заключается в первичном ключе. Если при слиянии данных ADO.NET встретит две записи с одинаковым значением первичного ключа, он совместит их содержимое в одну запись. В этом примере у обоих объектов DataSet есть записи со значениями первичного ключа 1 и 2. Кроме того, у каждого DataSet есть не имеющая аналога в другом объекте.
ГЛАВА 1 Сложные случаи обновления данных
429
DataTable
ГО-Кеу CofuiTuiA
1 Main Main
2 Main Main
3 Main Main
Второй обьею DataTable
'с г OlumnA 1
1 г 1 2nd \ 2nd
2 1 1 2nd 1 2nd I
3 1 _L_ 2nd 1 2nd
Основной объект DataTable после вызова метода Merge
-'¦(D-Key; A GolumnB ColumnC
1 2nd Main 2nd
Предыдущая << 1 .. 180 181 182 183 184 185 < 186 > 187 188 189 190 191 192 .. 260 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100