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

 

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

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

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

VefcSaA'ics;:;:.iss objWebService = new WebServiceOlassC ):
DataSet dsMain = ObjWebService.GetDataSetO;
ModifуDataSetContents(dsMain);
DataSet dsChanges = dsMain.GetChangesO;
dsChanges = objWebService.SubmitChanges(dsChanges);
dsHain.Merge(dsChanges);
dsMain.
Метод Merge и значения автоинкремента
Слегка модифицируем наш пример. Теперь мы будем работать с информацией не о клиентах, а о заказах. В данном примере полем первичного ключа таблицы БД, содержащей информацию о заказах, будет поле с автоинкрементом - по аналогии с таблицей Orders БД Northwind.
432
Часть Iii Автономная работа с данными: объект DataSet модели ADO.NET
Как и в предыдущем примере, клиентское приложение взаимодействует с БД посредством Web-сервиса. Предположим, пользователь выбрал два заказа, размещенных имеющимся клиентом, .толпы два новых его заказа и затем передал эти новые заказы в БД. Вы уже знаете, как с помощью метода < rV/oV.Y.'/^ca передать Web-сервису только измененные записи (рис. I I -Во.
DataSet с оригинальными данными
OrderlD : CustomerlD EmployeelD x .
10643 ALFKI 6 09/22/1997
10692 ALFKI 4 10/31/1997

объект DataSet с новыми «шиши
: OrderlD CustomertD EmployeelD OtderDate
mm ALFKI 6 09/22/1997
10692 ALFKI 4 10/31/1997
-t ALFKI 7
щ -г mm

(Объектов/, возвращенный методом tafa^yesи переданный Web-cepeacy
. OrderlD ID fcropioyearo OrderDate .
-1 ШШ 7 02/24/2002
- ¦ ШЩ 7 02/24/2002
Рис. 11-10. Передача Web-сервису только новых записей о заказах при помощи метода GetChanges
Вы также умеете выбирать в объект DataSet. используемый Web-сервисом для передачи новых заказов в БД, новые значения автоинкремента. Эти значения включены в DataSet. возвращаемый Web-сервисом после передачи измененных заказов в БД. Однако если объединить его содержимое с содержимым основного DataSet, мы не получим желаемого результата.
Результат аналогичен показанному на рис. 11-11, Основной объект DataSet содержит оригинальные, ожидающие передачи в БД, заказы с зна-
чениями полей OrderlD, а также все заказы, возвращенные Web-сервисом, с реальными значениями полей OrderlD? В чем дело?
Данный метод Merge сравнивает записи различных объектов DataSet с использованием первичного ключа объекта tunaIt-'hie. Записи, которые нам требуется объединить метода Merge, имеют разные значения полей первичного
ключа. Метод Merge не понимает, что заказы в объекте DataSet, возвращенном Web-сервисом, соответствуют записям о заказах в основном объекте ожидаю-
ГЛАВА 11 Сложные случаи обновления данных 433
щем передачи в БД. В результате метод просто добавляет записи из DataSet\Yeb-сервиса в основной DataSet.
Понятно, что нам требуется совсем иное поведение, и здесь пригодится пара решений.
Основной объект DataSet с оригинальными данными
OrderlD Customer!!) EmoioyefelO QrclerOate
10643 ALFKI 6 09/22/1997
10692 ALFKt 4 10/31/1997
-1 ліга 7
I ALFKt 7

Основной объект с новыми™*.*
CustomertD Emptoye-eto OrdefDate
12000 ALFKt 7 02/24/2002
12001 ALFKI 7 02/24/2002

ОбъектDmSat. возвращенный мтсдом GetCmgtsи переданный Web-сервису
OrderlD GustomertD EmptpyeejO :
10643 ALFKI 6 09/22/1997
10692 ALFKI 4 10/31/1997
-\ ALFKI 7 02/24/2002
-2 ALFKI 7 92/24/2002
12000 ALFKt 7 02/24/2002
12001 ALFKI 7 02/24/2002
Рис. 11-1 I Результат слияния объекта DniaSvi. возвращенного Web-сервисом, с основным объектом DataSet
Очистка перед вызовом метода Merge
Нсрмсмся к результатам вызова метода Merge на рис. И м Нашей целью было объединить содержимое двух объектов DataSet и добавить новые значения столбца OrderlD в существующий объект DataSet. Результаты не так уж и далеки от требуемых. Новые значения OrderlD добавлены, но также есть и копии новых заказов с --фп'-.лтмили!¦¦ значениями OrderlD.
Для достижения желаемого результата можно удалить новые заказы из объекта DataSet перед тем, как объединить его содержимое с DataSet, возвращаемым Web-
434 Часть III Автономная работа с данными: объект DataSet модели ADO.NET
сервисом. Следующий фрагмент с помощью метода ОШШк&МПыпт* ет значение свойства Rmr-'ii/ic которых — Adwd. и удаляет их из объекта
DataSet иронде. чем выполнить слияние его содержимся i> с данными объекта
DataSet. возвращаемого Web-сервисом.
Visual Basic .NET
Dim objWebService As New WebServiceClassO
Dim dsMain As DataSet = objWebService.GetDataSst()
ModifyDataSetContents(dsMain)
Dim risChano.es As DataSet = dsMain.GetChanges()
dsChanges = objWebService. SubmitChanges{dsChanges)
"flepet слиянием содержимого основного DataSet и данных DataSet, "возвращаемого Web-сервисом, удаляем из основного DataSet 'новые заказы, ожидающие передачи в БД Dim tbl As DataTable = dsMain.Tables("Orders") Dim row As DataRow
For Each row in tbl.Select("", "", DataRowViewState.Added)
tbl.Rows.Remove(row) Next row
dsMain.Merge(dsChanges) dsMain.AeneptChanges 0
Visual C# .NET
WebServiceClass objWebService = new WebServiceClassO;
DataSet dsMain = objWebService.GetDataSetO;
Предыдущая << 1 .. 182 183 184 185 186 187 < 188 > 189 190 191 192 193 194 .. 260 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100