Come eseguire transazioni con un database DB2

Le transazioni sono un gruppo di operazioni di database combinate in un'unità logica di lavoro e vengono usate per controllare e mantenere la coerenza e l'integrità di ogni database nonostante gli errori che potrebbero verificarsi nel sistema. Una transazione è costituita da una serie di istruzioni SQL SELECT, INSERT, UPDATE o DELETE. Se non si verificano errori durante una transazione, tutte le modifiche nella transazione diventano parte permanente del database. Se si verificano errori, nessuna delle modifiche viene apportata al database.

Una transazione è considerata locale quando è composta da una sola fase e viene gestita direttamente dal database. Le transazioni sono considerate distribuite, invece, quando vengono coordinate da un monitoraggio delle transazioni e sono completate con meccanismi fail-safe (quale il commit in due fasi).

Nota

Le transazioni sono più efficienti quando vengono eseguite nel server. Se si lavora con un database SQL Server che usa ampiamente le transazioni esplicite, è consigliabile scriverle come stored procedure usando l'istruzione Transact-SQL BEGIN TRANSACTION.

Si controllano le transazioni con l'oggetto MsDb2Connection . È possibile avviare una transazione locale con il metodo BeginTransaction. Dopo aver avviato una transazione, è possibile inserire un comando in tale transazione con la Transaction proprietà di un MsDb2Command oggetto. In seguito è possibile eseguire il commit o il rollback delle modifiche apportate nell'origine dati in base all'esito corretto o errato dei componenti della transazione.

Sono disponibili tre comandi di base per le transazioni: BEGIN, COMMIT e ROLLBACK. L'istruzione BEGIN contrassegna l'inizio di una transazione. Tutte le procedure tentate dopo l'istruzione BEGIN vengono considerate parte della transazione, completata dall'istruzione COMMIT o annullata dall'istruzione ROLLBACK.

Per eseguire una transazione

  1. Chiamare MsDb2Connection.BeginTransaction per contrassegnare l'inizio della transazione.

    BeginTransaction restituisce un riferimento alla transazione. Conservare questo riferimento in modo che sia possibile assegnarlo ai comandi elencati nella transazione.

  2. Assegnare la transazione all'oggetto MsDb2Command.Transaction da eseguire.

    Se un comando viene eseguito in una connessione con una transazione attiva e l'oggetto Transaction non è stato assegnato alla Transaction proprietà di Command, viene generato un MsDb2Exception oggetto .

  3. Eseguire i comandi richiesti.

  4. Chiamare MsDb2Transaction.Commit per completare la transazione o chiamare MsDb2Transaction.Rollback per annullare la transazione.

    Se la connessione viene chiusa o eliminata prima che venga eseguito il metodo Commit o Rollback, viene eseguito il rollback della transazione.

    Nell'esempio di codice seguente viene illustrato come eseguire una transazione.

static void TransactionConnection()  
{  
    MsDb2Connection myConnection new MsDb2Connection(@"file name=HOST.udl ");  
    myConnection.Open();  
    // Start a local transaction.  
    MsDb2Transaction myTrans = myConnection.BeginTransaction();  
    // Enlist the command in the current transaction.  
    MsDb2Command myCommand = myConnection.CreateCommand();  
    myCommand.Transaction = myTrans;  
    try  
    {  
        myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')";  
        myCommand.ExecuteNonQuery();  
        myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')";  
        myCommand.ExecuteNonQuery();  
        myTrans.Commit();  
        Console.WriteLine("Both records are written to database.");  
    }  
    catch(Exception e)  
    {  
        try  
        {  
           myTrans.Rollback();  
        }  
        catch (MsDb2Exception ex)  
        {  
            if (myTrans.Connection != null)  
            {  
                Console.WriteLine("An exception of type " + ex.GetType() +  
                    " was encountered while attempting to roll back the transaction.");  
            }  
        }  
  
        Console.WriteLine("An exception of type " + e.GetType() +  
            "was encountered while inserting the data.");  
        Console.WriteLine("Neither record was written to database.");  
    }  
    finally  
    {  
        Console.ReadLine();  
        myConnection.Close();  
    }  
}   
// End TransactionConnection  
  

Vedere anche

Uso del provider gestito per DB2