The transaction has aborted

giovedì 13 marzo 2014 - 12.45
Tag Elenco Tags  C#  |  .NET 4.0

svipla Profilo | Senior Member

Ciao a tutti
sul server ricevo questo messaggio di errore quando eseguo un'operazione di salvataggio:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Il problema potrebbe essere che ho una inserito un transactionscope in una procedura che richiama una procedura con all'interno un altro transactionscope?

TransactionOptions transactionOptions = new TransactionOptions();
transactionOptions.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
transactionOptions.Timeout = new TimeSpan(0, 5, 0);
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, transactionOptions))
{

Grazie mille

alx_81 Profilo | Guru

>Ciao a tutti
ciao

>Il problema potrebbe essere che ho una inserito un transactionscope
>in una procedura che richiama una procedura con all'interno un
>altro transactionscope?
nidificare i transactionscope non ha nulla di male, purchè gestisci bene la transazione.
Hai fatto una complete per ogni transactionscope oppure no?
Altrimenti la transazione non si completa.

>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

Faccio così:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

public static bool SalvaCliente(DataRow cliente) { string sql = "INSERT ..."; try { return ExecuteNonQuery(sql); } catch { return false; } }
private static bool ExecuteNonQuery(string sql)
{
bool result = true;
try
{
TransactionOptions transactionOptions = new TransactionOptions();
transactionOptions.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
transactionOptions.Timeout = new TimeSpan(0, 5, 0);
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, transactionOptions))
{
using (SqlConnection con = new SqlConnection(Costanti.CONNECTION_STRING))
using (SqlCommand cmd = new SqlCommand(sql, con))
{
con.Open();
try
{
if (cmd.ExecuteNonQuery() > 0)
{
con.Close();
result = true;
}
else
{
con.Close();
result = false;
}
}
catch (Exception ex)
{
con.Close();
con.Dispose();

result = false;
}
}

if (result) scope.Complete();
}//TransactionScope
}//Try
catch (Exception ex)
{
return false;
}

return result;
}

alx_81 Profilo | Guru

>Faccio così:
secondo me è la parte in cui fai IF (RESULT), la complete la devi fare comunque, altrimenti non viene committata la transazione e ne viene fatto il rollback..
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