VBScript Transactions: Vediamo come implementare le transazioni SQL in ASP
Transactions
Introduzione
Le transazioni sono un meccanismo per mantenere l'integrità dei dati nei database transazionali come SQL Server. E' possible utilizzarle in ASP in modo abbastanza semplice.
Cosa sono le transazioni
In SQLServer, Quando eseguiamo una serie di query all'interno di una transazione, abbiamo la possibilità di eseguirle tutte (effettuare il commit) oppure nessuna (un rollback della transazione)
Una transazione SQLServer ha la seguente forma:
begin transaction
query 1
query2
...
query n
commit (oppure rollback)
E' possibile implementare le transactions in asp utilizzando MTS (Microsoft's answer to transactions).
Utilizzo delle transazioni
Le transactions possono risultare utili per evitare l'inserimento dei dati quando una delle query che stiamo eseguendo genera un errore.
Possiamo utilizzare l'oggetto Err per capire se si sono verificati errori ed eseguire il rollback, oppure, se non si sono verificati errori fare il commit e salvare i dati su database.
Implementare le transazioni in ASP
Per utilizzare le transactions in ASP occorre inserire una direttiva nelle nostre pagine che ne fanno uso.
<%@TRANSACTION = proprieta %>
La proprietà può assumere uno dei valori riassunti nella tabella in basso.
Proprietà
Descrizione
Requires_New
La pagina crea sempre una nuova transazione
Required
La pagina crea una transazione se non ne trova una attiva, altrimenti usa quella che trova.
Supported
La pagina utilizza le transazioni attive ma non ne può creare di sue.
Not_Supported
Le transazioni non sono supportate
Anche se in genere utilizzeremo le transazioni in un unica pagina asp, è possibile realizzare transazioni che "durano" per più pagine, pensiamo ad esempio ad un wizard in cui vogliamo salvare i dati su database soltanto se abbiamo compilato correttamente tutti i campi di una serie di form uno dopo l'altro.
Con "Transaction = Supported", possiamo far si che la transazione continui quando si passa da una pagina all'altra.
Commit e Rollback delle transazioni
Creata la transazione abbiamo due metodi per eseguire il commit oppure il rollback della transazione.
ObjectContext.SetComplete
esegue il commit
ObjectContext.SetAbort
per il rollback
Abbiamo inoltre due eventi che vengono scatenati dalle due funzioni
Sub OnTransactionCommit() 'codice
End Sub
viene eseguita in caso di commit
Sub OnTransactionAbort() 'codice
End Sub
viene eseguita in caso di rollback
Esempio
Visti i comandi base, vediamo come utilizzarli in un caso concreto
Set connDB = Server.CreateObject("ADODB.CONNECTION")
connDB.ConnectionTimeout = 0
connDB.Open"DSN=DATASOURCE"
' qui eseguo una serie di operazioni, ad esempio inserimenti su database
connDB.Execute("insert into table (nome,cognome) values ('paloino','paperino')")
connDB.Execute("insert into table (nome,cognome) values ('paperon','de paperoni')")
'controllo se ci sono stati errori Iferr.number > 0Then ObjectContext.SetAbort Else ObjectContext.SetComplete End If
Sub OnTransactionCommit() response.write("errore nell'inserimento") End Sub
Sub OnTransactionAbort() response.write("dati inseriti") End Sub %>