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
Annullare operazioni db nel caso di errore
mercoledì 25 giugno 2014 - 18.16
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
C#
|
.NET 4.0
Gemini
Profilo
| Expert
856
messaggi | Data Invio:
mer 25 giu 2014 - 18:16
Ciao a tutti
devo scrivere una procedura che deve salvare una serie di dati sul database.
Per far questo eseguo diverse insert. Vorrei alla fine, nel caso si verifichi un errore, annullare tutte le operazioni che ho eseguito.
Sto provando con TransactionScope, ma sul server ho errore nel caso ho TransactionScope annidati.
Come posso evitare questo? Ci sono alternative a TransactionScope?
Grazie mille
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
mer 25 giu 2014 - 18:39
>Ciao a tutti
ciao
>Per far questo eseguo diverse insert. Vorrei alla fine, nel caso
>si verifichi un errore, annullare tutte le operazioni che ho eseguito.
ci sono logiche particolari oppure puoi passare da un set di dati e fare INSERT da una SELECT su di una tabella passata?
Con una sola insert, in caso di errore, la rollback di tutto è implicita.
>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
Gemini
Profilo
| Expert
856
messaggi | Data Invio:
gio 26 giu 2014 - 09:12
Ciao e grazie
non mi è chiaro quello che mi hai scritto.
Puoi inviarmi esempi o link dove studiare?
Grazie
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
gio 26 giu 2014 - 16:15
>non mi è chiaro quello che mi hai scritto.
>Puoi inviarmi esempi o link dove studiare?
provo a spiegarmi meglio..
devi fare per forza un ciclo e per ogni loop fare una sola insert, oppure puoi passare, ad esempio ad una stored procedure (ma puoi usare anche T-SQL semplice) una tabella con i dati da inserire tutti in una volta?
O ancora, i dati li puoi andare a prendere da una tabella (SELECT) per poter poi inserire tutto nella tua destinazione?
puoi fare le cose che ti ho indicato o sei costretto a fare il ciclo? Cosa ti costringe a fare un ciclo se è così? Giusto per capire se possiamo invertire un po' il punto di vista.
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
Gemini
Profilo
| Expert
856
messaggi | Data Invio:
ven 27 giu 2014 - 09:36
Ciao
è un piccolo e-commerce. Quindi, mi salvo prima i dati del cliente, poi l'ordine e poi i dettagli dell'ordine.
Se in una di queste fasi si verifica un errore, devo annullare tutti i dati inseriti. Prima eseguito tutte queste operazioni a mano, nel senso che scrivevo del codice per cancellare tutti i dati dal db.
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
ven 27 giu 2014 - 15:44
>è un piccolo e-commerce. Quindi, mi salvo prima i dati del cliente,
>poi l'ordine e poi i dettagli dell'ordine.
>Se in una di queste fasi si verifica un errore, devo annullare
>tutti i dati inseriti. Prima eseguito tutte queste operazioni
>a mano, nel senso che scrivevo del codice per cancellare tutti i dati dal db.
Allora puoi fare una stored procedure che si aspetta tre parametri:
- dati dell'utente
- dati dell'ordine
- tabella con i dettagli dell'ordine
La stored procedure mette tutto sotto transazione (con SET XACT_ABORT ON in testa) e se la transazione non va bene per tutto hai la rollback implicita, che oltre tutto restituisce al chiamante l'errore che puoi trappare e gestire.
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
andrestu
Profilo
| Expert
772
messaggi | Data Invio:
sab 28 giu 2014 - 05:32
scusate se mi intrometto nella discussione ma leggendo vorrei fare una domanda aggiuntiva ad Alex.
"SET XACT_ABORT ON" dove va messo all'interno della SP?
prima della insert ma dopo la definizione dei parametri?
nel caso in cui la SP non sia impostata con "SET XACT_ABORT ON" come si comporta, non fa il rollback in caso di errore?
chiedo perchè io ho diverse SP ma nessuna impostata con "SET XACT_ABORT ON"...
grazie
Andrea Restucci - Web Developer
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
lun 30 giu 2014 - 10:41
>"SET XACT_ABORT ON" dove va messo all'interno della SP?
non è che va messo, è un setting di sessione.. e in quanto tale, serve nella sessione in cui lo vuoi mettere.
>prima della insert ma dopo la definizione dei parametri?
siccome agisce sulle transazioni successive al set, dove ti è più comodo (a me piace in alto, se è uno solo, perchè lo vedo subito).
>nel caso in cui la SP non sia impostata con "SET XACT_ABORT ON"
>come si comporta, non fa il rollback in caso di errore?
comunque prendi eccezione, ma, per quei casi in cui la rollback non è prevista, essa non viene fatta. Inoltre, se in un processo sotto transazione ci si è interrotti a metà, la transazione non viene chiusa.
>chiedo perchè io ho diverse SP ma nessuna impostata con "SET XACT_ABORT ON"...
Non è necessario, dipende da come vuoi gestire le cose.
Invece cerca di mettere SET NOCOUNT ON.. quello è importante.
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
andrestu
Profilo
| Expert
772
messaggi | Data Invio:
ven 4 lug 2014 - 08:28
SET NOCOUNT ON
questo lo mette in automatico quando creo una nuova SP, ma a che serve?
Andrea Restucci - Web Developer
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
ven 4 lug 2014 - 09:53
>questo lo mette in automatico quando creo una nuova SP, ma a che serve?
Ecco la documentazione:
http://msdn.microsoft.com/it-it/library/ms189837.aspx
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
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 !