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

 

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

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

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

444
Часть III Автономная работа с данными: объект DataSel модели ADO.NET
\i Л nii І^ііІ'ллр.Сиґ-ІІк.і,
ar^caHoni-.^.r:;;.-::] Ю^гф.», Ч!Тг г&ч* ! kn-fcip and
Cuti the buttons Л Ihe lap Ы іЬ-Удіт ІЗ C4V» iisnffcis You шмикиі lt-HiCIS inj wwtve the erai .sua the control: n Ihe SuM pane AIM you have K'ioVed gl її »¦< пі j«gu sen
і
¦aByCynentUtei MwftnrJ =^ Cam J Um
tVeKiint^ .... : j UJpjjTE
F^fad UpMr ' I — і' - dak
F*4*JiJpai!» Row L>elft*dfin Aro'hoius«
¦
RqwSiate; Mnrfified
Uipw. гкп The itwUs Зачел niotiiSterf SsysmiUrfif «ад.
'2
U
І в
I p і: о " О' . ijl
¦ - 1 .И
Modified ВуСшел. Ut*i
Modified By Си,і*;* iJ.-i Qiiainal Value ? пдртаї Value _
Рис. Приложение Conflicts
Работа с распределенными транзакциями
В главе 4 рассказывалось об объекте Transaction ADO.NET. Он позволяет сгруппировать результаты нескольких зйлросо». жж/лкяюш;кся по одному соединению, в одну единицу работы,
Допустим, ваша БД содержит банковскую информацию. Перевести деньги со сберегательного на текущий счет можно, выполнив два следующих запроса:
UPDATE Savings
SET BalanceDue = WHERE AccountlD
UPDATE Checking
SET BalanceDue = WHERE AccountID =
BalanceDue
= 17
100
BalanceDue + 100 17
Чтобы гарантированно объединить два изменения в единицу работы, которую можно подтвердить или отк.гпп ь.. перед выполнением запросов следует создать новый объект Transaction. Если возникнет ошибка или один из запросов не найдет нужной записи, транзакцию необходимо откатить. В противном случае изменения, сделанные транзакцией, будут подтверждены. На рис. 1 Ыбпоказано, как поместить оба изменения в одну транзакцию впрочем, вам уже известно).
Но что, если сведения о сберегательном и текущем счетах хранятся в разных БД?
Можно открыть соединения с обеими БД и на каждом из них начать транзакцию. Затем, если при снятии средств со сберегательного счета или внесении средств
на текущий счет произойдет ошибка, обе транзакции следует откатить. Если же
все нормально, их надо подтвердить. Все просто. Данная ситуация
проиллюстрирована на рис.
ГЛАВА Сложные случаи обновления данных 445
.jgjl КОМПОНЕНТj|,
t M ¦ M ¦ имш—іприті ні її її г і.....щ|і
Рис. 11-16. Помещение нескольких изменений
содержимого БД в одну граїчзпкц;™
компонент
Транзакция
гатедвнй* »___счбгое_
Снятие средств сберегательного
счета
Транзакция ¦
БД
Внесение средств текущих на текущий Счет 1^.С1Я*ЗВ .
Рис. 11-17. Помещение изменений содержимого разных БД в отдельные транзакции
Предположим, вы подтвердили снятие средств со сберегательного но
прежде, чем вы успели подтвердить внесение средств на текущий счет, разорвалось подключение к сети. БД выявит разорванное соединение и автоматически откатит транзакцию. Получится, что деньги со сберегательного счета вы сачли, но на текущий счет их не внесли.
Хм. Возможно, использование отдельных транзакций на каждом соединении — не слишком надежное решение проблемы. Чтобы повысить надежность епсп мы. приложение должно плотнее взаимодействовать с БД для координирования транзакций и решения проблем, подобных описанной выше, Необходима транзакция, позволяющая открывать несколько подключений к БД. Транзакция, объединяющая несколько ресурсов, называется распределенной (distributed transaction),
Примечание Обработке транзакций и СОМ+ посвящено множество книг.
нятно, что полностью раскрыть эту тему на нескольких страницах невозможно, Я расскажу лишь об основах обработки транзакций и работы с компонентами СОМ+. Подробнее об обработке транзакций - в книге Philip A. Bernstein и Eric Newcomer «Principles of Transaction Processing*, Morgan Kaufmann, 1997.
Координаторы транзакций и диспетчеры ресурсов
В распределенной транзакции участвуют два основных компонента — диспетчер ресурсов и координатор тр.ш.ізкнип Диспетчер ресурсов выполняет нужную вам работу — изменяет содержимое БД или считывает сообщение из очереди — и затем сообщает о результатах ее выполнения.
446
Часть HI Автономная работа с данными: объект DataSet модели ADO.NET
Координатор транзакций взаимодействует с диспетчерами ресурсов, weftст но-ванными в транзакции, и управляет текущим состоянием этой транзакции. Если один из диспетчеров уведомляет координатора о возникновении ошибки, тот оповещает другие диспетчеры о необходимости отменить результаты работы, выполняемой в контексте данной транзакции. Если все диспетчеры сообщают об успешном выполнении возложенных на них задач, координатор указывает им
подтвердить результаты выполненной работы. Двухфазная фиксация
Все диспетчеры ресурсов реализуют технологию под незнанием двухфазная фиксация (two-phase commit). Координатор транзакций указывает каждому диспетчеру подготовить н iMfiicnmj, выполненные во время транзакции. Это первый этап процесса. В действительности диспетчеры еще не подтвердили сделанные изменения. Они лишь готовятся сделать это.
Когда все диспетчеры сообщат о готовности подтвердить изменения, координатор укажет им выполнить такое подтверждение. Тем не менее, если хотя бы один диспетчер сообщит о невозможности подготовить изменения, координатор укажет всем диспетчерам отменить результаты работы, проделанной во время транзакции.
Предыдущая << 1 .. 187 188 189 190 191 192 < 193 > 194 195 196 197 198 199 .. 260 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100