Alla richiesta COMMIT TRANSACTION non è associata un'istruzione BEGIN...

martedì 01 aprile 2014 - 10.17
Tag Elenco Tags  C#  |  .NET 4.0

svipla Profilo | Senior Member

Ciao a tutti
ho già aperto una discussione su questo tema e pensavo di aver risolto, ma ora ho un altro problema.

Ho questo codice:

public bool Salva()
{
try
{
TransactionOptions transactionOptions = new TransactionOptions();
transactionOptions.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
transactionOptions.Timeout = new TimeSpan(0, 5, 0);
using (TransactionScope scope_gruppo_contatti = new TransactionScope(TransactionScopeOption.Required, transactionOptions))
{
bool result = true;

Newsletter old = new Newsletter(ID);
if (!RegExp.IsNumeric(ID) || ID == "0")
{
result = salvaDati(); //Richiama una procedura in un'altra clasee che esegue una insert
}
else
{
result = aggiornaDati(); //Richiama una procedura che esegue una update
}

if (result)
{
salvaAllegati(old.Allegati); //esegue una update
}
if (result) scope_gruppo_contatti.Complete();

return result;
}//TransactionScope
}
catch (TransactionAbortedException ex)
{
Log.LogWrite("err", "Newsletter.Salva()", ex.Message, string.Empty);
return false;
}
}


Ho solo una TransactioSope e faccio così "if (result) scope_gruppo_contatti.Complete();" perchè se si verifica un qualsiasi problema, non devo salvare.

Quando eseguo: if (result) scope_gruppo_contatti.Complete(); ricevo questo errore

Alla richiesta COMMIT TRANSACTION non è associata un'istruzione BEGIN TRANSACTION corrispondente.

Grazie mille

alx_81 Profilo | Guru

>Ciao a tutti
ciao

>Ho solo una TransactioSope e faccio così "if (result) scope_gruppo_contatti.Complete();"
>perchè se si verifica un qualsiasi problema, non devo salvare.
>Quando eseguo: if (result) scope_gruppo_contatti.Complete();
>ricevo questo errore
>Alla richiesta COMMIT TRANSACTION non è associata un'istruzione
>BEGIN TRANSACTION corrispondente.
probabilmente nelle stored procedure hai già una gestione delle transazioni, e quindi la procedura per qualche motivo fa rollback. Siccome la rollback porta i counter delle transazioni a zero (non è che le decrementa di una alla volta, annulla TUTTO). Il Complete() non trova più transazioni da gestire. Questo problema è ostico e annoso, e credo che se vuoi usare il TScope, ti conviene fare la transazione solo lì, togliendola dalla procedura.

>Grazie mille
di nulla!
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

svipla Profilo | Senior Member

Ciao e grazie
il problema è che ho solo una Transaction attiva.
Per questo non capisco qual'è il problema

alx_81 Profilo | Guru

>Ciao e grazie
>il problema è che ho solo una Transaction attiva.
>Per questo non capisco qual'è il problema
se la transazione è solo una ed è quella del transaction scope (quindi nella sp non ce ne sono altre) vuol dire che dentro la sp viene fatta una rollback per qualche motivo..

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5