Софтуерно Инженерство
Loading...
+ Нов въпрос
tiapko avatar tiapko 31 Точки

Problem 21. *Massive Shopping - относно позицията на commit

Имам един въпрос относно позицията на commit-а и по-скоро за неговата позиция, докато писах този код: http://pastebin.com/BNgFxRx2 (ред 30)

 

Защо не се позволява следния синтаксис (пародия на псевдокод):

begin transaction

if (succeeded)

 -- insert something

else rollback

commit

 

 идеята е, че не коммитвам след CRUD операциите, а след като свърши if-a. След като промених кода на това  (пародия на псевдокод):

 

begin transaction

if (succeeded)

 -- insert something

commit

else rollback

 

То всичко проработи. Идеята ми беше, че изпълнението на кода винаги ще мине през if-a и ако не ролбекне да комитне, но не в самия if, а след като мине през него(със сигурност ще мине през тази част на кода, ако не роллбекне).

 

Та въпроса ми е, защо тези две логически идентични операции не са позволени.

 

 

 

Тагове:
0
C# DB Fundamentals
ZornitsaSerbezova avatar ZornitsaSerbezova 454 Точки

if (succeeded)

 -- insert something

else rollback

commit

Не може така, защото ако условието на if не се изпълнява, ще се изпълнят и двете: камит и ролбек. Не мисля, че може да изпълниш и двете.

0
Gesh4o avatar Gesh4o SoftUni Team Trainer 305 Точки

Здравейте,
Примера на колежката ясно показва, че двете операции НЕ са еднакви логически. Също така действията на ROLLBACK и COMMIT си противоречат относно дали трябва да се запази една промяна или не (COMMIT-a запазва всички промени, правени по базата, а ROLLBACK-a напротив - връща всички промени обратно). В този смисъл не би трябвало в един случай да използваме и двете операции, защото се получава двусмислие.

Поздрави! :)

0