Upload di file e transazioni con ASP.NET e ADO.NET

di: Andrea Marzilli     06 Febbraio 2010

Condividere documenti online, aggiungere foto agli album fotografici di un gruppo, o all'ultimo post del nostro blog... Diventa sempre più frequente la necessità di caricare dei file su un server e di tenerne contemporaneamente traccia su un database.

Se si affronta la cosa da sviluppatori, può emergere presto un'esigenza: quella di voler verificare sia il corretto aggiornamento del database, sia il successo dell'upload, nello stesso momento. Questo significa considerare il caricamento e l'aggiornamento del DB come un'unica operazione. Vediamo come risolvere il problema sfruttando il meccanismo delle transazioni, contemplate in ADO.NET.

Le transazioni

Una transazione nel gergo dei database è un insieme di operazioni che coinvolge più oggetti (tipicamente tabelle), che viene considerata come un'operazione unica.

Immaginiamo la situazione in cui due tabelle siano da aggiornare contemporaneamente. Ad esempio un form nel quale un utente inserisce sia dati relativi alle sue preferenze sul sito, sia i propri dati personali. È plausibile che l'amministratore di database abbia previsto due tabelle: una per i dati personali con accesso ristretto ed una seconda per le preferenze con diritti di accesso più blandi.

In casi come questi, occorre scrivere contemporaneamente sulle due tabelle per registrare correttamente l'utente e possiamo dire che la registrazione è andata a buon fine, solo se sicuri che entrambe le operazioni di scrittura abbiano avuto successo.

Questo, che per alcuni è stato un rompicapo (specie agli esordi dei DBMS) si risolve semplicemente con una transazione.

Possiamo descrivere il comportamento di una transazione con un semplice schema:

Schema di una transazione

Inizio della Transazione

    <Operazione 1>
    <Operazione 2>
    ...
    <Operazione N>

    Tutte le operazioni sono andate a buon fine?
      
      SI --> Conferma tutte le operazioni (COMMIT)
      NO --> Annulla tutte le operazioni  (ROLL BACK)
  
Fine della Transazione

Come emerge dallo schema il successo della transazione è sancito dal comando COMMIT, mentre un ROLL BACK ripristina la situazione precedente all'inizio della transazione (riavvolge il nastro), assicurando la coerenza del database. Inoltre, durante tutta la transazione i record interessati non possono essere modificati da altri utenti.

Guide ASP.Net

Guida Windows Azure Code Snippets

Le migliori pratiche per far girare le applicazioni "in the cloud",...

Guida ASP.NET MVC Best Practices

Un workflow dettagliato e ricco di suggerimenti pratici per...

Guida ASP.NET Starter Kit

Un modo semplice per imparare ad utilizzare le tecnologie Microsoft...

Altre guide

Newsletter @Microsoft Dev

Ogni giovedì, direttamente nella tua e-mail: articoli, guide, tutorial e script ASP, ASP.Net, SQL server e IIS.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Corso Progettazione database

11 Maggio 2012 a Milano
Disponibilità: 6 Posti

Amministratore di Reti Windows Server 2008

11 Giugno 2012 a Milano
Disponibilità: 5 Posti

Nessun corso previsto