/ / Множество съхранени proc в .Net под 1 транзакция - c #, asp.net, sql-сървър, транзакции, transactioncope

Множество съхранени proc повикване в. Net под 1 транзакция - c #, asp.net, sql-сървър, транзакции, transactioncope

Имам .net уеб страница, в която се извикват две съхранявани проци. И двете от тях започват да извършват транзакция в sql сървър. Също така наричам втория прок няколко пъти, в зависимост от някои, ако условията.

Искам да обвържа целия този процес с една транзакция. Огледах се и намерих Sqltransaction и TransactionScope класове в C # ще ми помогне в тази ситуация.

Но аз никога не съм ги използвал, винаги използвамтранзакция в sql сървър и затова не знам дали транзакциите с .Net ще имат проблеми, тъй като и двата мои съхранявани прокси имат собствена транзакция Begin-commit в Sql Server.

Ако има конфликт, има ли начин да ги накараме да работят при една транзакция?

Отговори:

1 за отговор № 1

Да, възможно е да извикате (например съществуващи или наследени) съхранявани прокти от .Net, които използват ръчно BEGIN TRAN, COMMIT TRAN / ROLLBACKs под .Net TransactionScope, или ако управлявате транзакцията от a SqlTransaction, (Въпреки че, за да посочите очевидното, ако можете да избегнете използването на няколко транзакционни технологии, направете това).

За сценария "щастлив случай", какво ще се случи е, че @@TRANCOUNT ще се увеличи, когато SPROC се нареждат транзакции (точно както при вложени транзакции в SqlServer). Транзакциите се извършват само когато @@TRANCOUNT натиска нула след свързването на най-външната връзка към връзката. т.е. inner commits ще намалее @@TRANCOUNT, Обърнете внимание обаче, че същото не е вярно за ROLLBACKS - освен ако не използвате точки на запис, всяко връщане назад ще доведе до връщане на цялата транзакция. Трябва да бъдете много внимателни, за да се съберете @@TRANCOUNTs.

Звучиш малко нерешен TransactionScope срещу SqlTransaction. TransactionScope е по - гъвкав, тъй като може да обхваща както еднофазови, така и разпределени транзакции (използвайки DTC). Ако обаче трябва само да координирате транзакцията по единична връзка, същата база данни, тогава SqlTransaction би било добре.