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
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.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 allaTransaction
proprietà diCommand
, viene generato unMsDb2Exception
oggetto .Eseguire i comandi richiesti.
Chiamare
MsDb2Transaction.Commit
per completare la transazione o chiamareMsDb2Transaction.Rollback
per annullare la transazione.Se la connessione viene chiusa o eliminata prima che venga eseguito il metodo
Commit
oRollback
, 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