Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
ASP.NET 2.0 / 3.5 / 4.0
Rollback o commit: gestione corretta nell'iterare alcuni elementi
sabato 18 novembre 2006 - 00.55
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
squilibrio
Profilo
| Expert
527
messaggi | Data Invio:
sab 18 nov 2006 - 00:55
Ciao, sto cercando di utilizzare il commit e rollback durante un'operazione di salvataggio
che itera degli elementi, dopo una serie di prove sono arrivato ad una versione semifunzionante
ma ottengo questo errore:
Server Error in '/' Application.
--------------------------------------------------------------------------------
This SqlTransaction has completed; it is no longer usable.
in questa posizione
catch (Exception exc)
{
lblDebug.Text = exc.Message;
transaction.Rollback();
}
dove sbaglio nella gestione della transazione?
Non so nemmeno se la mia soluzione è corretta (dal punto di vista del controllo di eventuali errori), io vorrei fare in modo che in caso i eventuali errori in fase di salvataggio, l'operazione non venga interrotta con solo alcuni elementi salvati; dovrà quindi essere effettuata solo se tutti gli elementi iterati vengono salvati
protected void btnConferma_Click(object sender, EventArgs e)
{
GridView gv;
DropDownList ddlVal;
DropDownList ddlApp;
string idRiga;
string idCom;
dbconn.Open();
SqlTransaction transaction = dbconn.BeginTransaction();
try
{
SqlCommand myCommandDelete = new SqlCommand("SchedaValutazione_Delete", dbconn, transaction);
myCommandDelete.CommandType = CommandType.StoredProcedure;
myCommandDelete.Parameters.Add(new SqlParameter("@Data", Data));
...
myCommandDelete.ExecuteNonQuery();
foreach (RepeaterItem item in rpt1.Items)
{
gv = (GridView)item.FindControl("grd1");
foreach (GridViewRow gr in gv.Rows)
{
idRiga = ((TextBox)gr.Cells[1].FindControl("tbIDRiga")).Text;
idCom = ((TextBox)gr.Cells[1].FindControl("tbidCom")).Text;
ddlVal = (DropDownList)gr.Cells[1].FindControl("ddlVal");
ddlApp = (DropDownList)gr.Cells[2].FindControl("ddlApp");
//Nuovo inserimento
if (New.ToString() == "OK")
{
SqlCommand myCommand = new SqlCommand("SchedaValutazione_Insert", dbconn, transaction);
myCommand.CommandType = CommandType.StoredProcedure;
myCommand.Parameters.Add(new SqlParameter("@Data", Data));
....
myCommand.ExecuteNonQuery();
transaction.Commit();
}
//Oppure modifica
if (New.ToString() == "NO")
{
SqlCommand myCommand = new SqlCommand("SchedaValutazione_Insert", dbconn, transaction);
myCommand.CommandType = CommandType.StoredProcedure;
myCommand.Parameters.Add(new SqlParameter("@Data", Data));
...
myCommand.ExecuteNonQuery();
transaction.Commit();
}
lblDebug.Text = "Salvatao";
}
}
if (Session["Approvazione"].ToString() == "OK")
{
//Viene aggioranto lo stato della vecchia scheda di valutazione (da N ad A)
SqlCommand myCommandUpdateStato = new SqlCommand("SchedaValutazioneUpdateStato_Update", dbconn);
myCommandUpdateStato.CommandType = CommandType.StoredProcedure;
myCommandUpdateStato.Parameters.Add(new SqlParameter("@Data", Data));
....
dbconn.Open();
myCommandUpdateStato.ExecuteNonQuery();
dbconn.Close();
}
Response.Redirect(linkFigureElenco);
}
catch (Exception exc)
{
lblDebug.Text = exc.Message;
transaction.Rollback();
}
finally
{
dbconn.Close();
}
}
Grazie per l'aiuto
Torna su
Stanze Forum
Elenco Threads
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 !