/ / Chiamata di processo memorizzata multipla in. Net con 1 transazione - c #, asp.net, sql-server, transazioni, transactioncope

Chiamata di più stored proc in. Net con meno di 1 transazione - c #, asp.net, sql-server, transazioni, transactioncope

Ho una .net web page in cui vengono chiamati due proc memorizzati. Entrambi hanno una transazione di commit iniziale in SQL Server. Inoltre sto chiamando il secondo proc più volte a seconda di alcune condizioni.

Voglio racchiudere l'intero processo in un'unica transazione. Mi sono guardato intorno e ho trovato che le clas Sqltransaction e TransactionScope in C # mi aiutano in questa situazione.

Ma non li ho mai usati, li uso sempretransazione in SQL Server, quindi non so se le transazioni in .Net avranno problemi in quanto entrambi i miei proc memorizzati hanno la propria transazione Begin-commit in Sql Server.

Se fanno conflitto c'è un modo per farli lavorare con una singola transazione?

risposte:

1 per risposta № 1

Sì, è possibile chiamare (ad es. Esistenti o legacy) Processi memorizzati da .Net che utilizzano il manuale BEGIN TRAN, COMMIT TRAN / ROLLBACKs sotto un .Net TransactionScope, o se gestisci la transazione da a SqlTransaction. (Anche se per affermare l'ovvio, se è possibile evitare l'utilizzo di più tecnologie di transazione, farlo).

Per lo scenario "caso felice", ciò che accadrà è che il @@TRANCOUNT sarà aumentato quando il SPROC le transazioni vengono chiamate (proprio come per le transazioni nidificate in SqlServer). Le transazioni vengono effettuate solo quando @@TRANCOUNT raggiunge zero dopo il commit più esterno sulla connessione. cioè inner commits semplicemente diminuirà @@TRANCOUNT. Si noti tuttavia che lo stesso non è vero per ROLLBACKS - a meno che tu non stia usando punti di salvataggio, qualsiasi rollback eseguirà il rollback dell'intera transazione. Dovrai stare molto attento a trovare le corrispondenze @@TRANCOUNTs.

Sembri un po 'indeciso TransactionScope vs SqlTransaction. TransactionScope è più versatile, in quanto può comprendere sia transazioni monofase che distribuite (utilizzando DTC). Tuttavia, se hai solo bisogno di coordinare la transazione su una singola connessione, stesso database, allora SqlTransaction andrebbe anche bene