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

 

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

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

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

2 2nd Main 2nd
3 Main Main (null)
4 2nd (null) 2nd
Рис. 11-8. Типичный пример результатов вызова метода Merge объекта DataSet
Заметьте: в результатах вызова метода Merge приоритет имеют данные объекта DataSet, добавляемые в содержимое другого объекта. Когда ADO.NET производит слияние аллисс и. значения столбца Column А основного iJaiar-eS заменяются значениями одноименного столбца из второго объекта DataSet. На рис. I 1-8 это записи со значениями поля ID, равными 1 и 2.
Теперь, когда вы стали лучше разбираться в принципах работы метода Merge, подведем итог.
Наше клиентское приложение получает от Web-сервиса информацию о клиентах. Пользователь изменяет содержимое возвращенного DataSet. Кашин .;н_-приложение с помощью метода О^Ск^щэ:, создает новый DataSet, содержании'! только измененные записи, и передает этот меньший по размеру объект Web-сервису.
Web-сервис передает изменения в БД, используя в логике обновления значения timcst, пир для оптимистичного управления параллелизмом. Кроме \ <л <-, Web-сервис выбирает из измененных записей новые значения timestamp (одним из описанных ранее в этой главе способов) и помещает их в свой объект DataSet. По завершении данной операции Web-сервис возвращает DataSet с включенными в него новыми значениями timestamp. Клиентское приложение получает этот объект и производит слияние его данных с содержимым основного DataSet (см. фрагмент кода ниже), чтобы интегрировать новые значения timestamp в основной объект DataSet (рис. 11-9).
430
Часть III Автономная работа с данными: объект DataSet модели A.DO.MET
Основной объект DataSet с измененными запоями
CustomefID і CompanyName ContactName і ': TSCOl
ALFK1 Alfreds Futtarkiste Contact т <Ордаинальное зчачение>
ANATR AnaTrujillo AnaTrujillo «^Оригинальное значение>
ANTON Antonio Moreno <Оригинальное значение>
ABOUT Around the Horn New #2 ^Оригинальноезначение>

Объект DataSet с новыми значениями timestamp, возвращаемым Web-CSpanCGM
UistomefiD Со трапу ; MattName: „: TSCol
ALFKI Alfreds Futterkiste New Contact <Ноеое знамение>
AR OUT Around the Horn New Contact #2 <Новое

основного объек 1,1 DataSet после слияния с данными DataSet, возвращенного We!)-еерзиСРИ
; CustomeilD CompanyName Contac Mat TSCol
him Alfreds New Contact #1 <Новоезначение>
ANATR AnaTrujillo AnaTrujillo <Орйтеиальноезначение>
ANTON Antonio Moreno Antonio Moreno <0ригинальное .5нгчен:іЄ>
A ROUT Around Horn New #2 «Новое значение>
Рис. 11 9. Слияние только что выбранных /нина>, с содержимым имеющегося объекта ВМаЗег
Visual Basic .NET
Dim objWebService As New IfebSorviceCistasO
Dim dsHain As DataSet = objWebService.GetDataSet()
ModifyDataSetContents(dsMain)
Dim dsCnanges As DataSet = <isMain.GetChar)ges()
dsChanges = objWeoService. SubmitClu."geH( J-jCnangt^)
dsMain.Merge(dsChanges)
Visual C# .NET
WebServiceClass objWebService = new WebServiceClassO;
DataSet dsMain = objWebService. GetDataSetO;
ModifyDataSetContents(dsMain);
DataSet dsChanges = dsMain.GetChanges();
dsChanges = objWebService.SubrnitChanges(dsChanges);
dsMain.Merge<dsChanges);
ГЛАВА 11 Сложные случаи обновления данных 431
Метод Merge и свойство RowState
Мы почти закончили. flpoi-.c-piiH содержимое записей, которые вы изменили в основном объекте DataSet, вы у:;идите, что они содержат ищи,и- шжпмя thm-M. тр. Тем не менее значение их свойства RowState - по-прежнему Modified.
Если пользователь щелкнет в приложении кнопку для передачи изменений в БД. объект DalaSet, возвращенный методом CetCbangvs. окажется в числе прочих содержать записи, которые пользователь уже изменял ранее. Когда Web-сервис получит данный DaiaSei и поемт^стея передать f:№C::::c3zt, ABG.N3'.. сгенерирует исключение, поскольку эти изменения уже есть в БД.
Мы что передали изменения в БД, но об этом не знает ADO.NET. После
того как . • ji- • передаст изменения, ADO.NET поменяет значение свойства ¦RottW&te измененных записей с Mndificdna Шгя^рШЗднако это произойдет лишь в объекте DataSet Web-сервиса. В DataSel клиентского приложения ADO.NET не меняет значение свойстваRuirVah-отредактированных спи w сп. поскольку объекты DataSet клиентского приложения и Web-сервиса никак не связаны,
Слияние содержимого DataSet, возвращаемого Web-сервисом, с содержимым основного DataSet, не поможет нам изменить значение свойства RowState измененных записей. Нам надо задать этому свойству значение Unmodified, однако ADO.NET не сделает это за нас автоматически. Тем не менее, поскольку мы m см. что успешно передали изменения из основного / с."/, можно вернуть свойству RowState измененных записей вызвав после вызова метода
Merge метод \cceptChanges основного объекта DataSet:
Visual Basic NET
Dim objWebService As New WebServlceClassf)
Dim dsMain As DataSet = objWebService.GetDataSetQ
ModifyDataSetContents(dsMain)
Dim dsChanges As DataSet = dsMain. GetChangesO
dsChanges = objWebService.SubmitChanges(dsChanges)
dsMain.Merge(dsChanges)
dsMain.AcceptChanges()
Visual C# -NET
Предыдущая << 1 .. 181 182 183 184 185 186 < 187 > 188 189 190 191 192 193 .. 260 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100