Cómo realizar transacciones con una base de datos DB2

Las transacciones son un grupo de operaciones de base de datos combinadas en una unidad lógica de trabajo y se usan para controlar y mantener la coherencia e integridad de cada base de datos a pesar de los errores que pueden producirse en el sistema. Una transacción consta de una serie de SQL instrucciones SELECT, INSERT, UPDATE o DELETE. Si no se produce ningún error durante una transacción, todas las modificaciones de la transacción se convierten en una parte permanente de la base de datos. Si se producen errores, no se realiza ninguna de las modificaciones en la base de datos.

Una transacción se considera local cuando consta de una única fase y la base de datos la controla directamente. Las transacciones se consideran distribuidas cuando se coordinan mediante un monitor de transacciones y utilizan mecanismos a prueba de errores (como confirmación en dos fases) en la resolución de transacciones.

Nota

Las transacciones son más eficientes cuando se realizan en el servidor. Si está trabajando con una base de datos SQL Server que hace un uso extensivo de transacciones explícitas, debe considerar la posibilidad de escribirlas como procedimientos almacenados mediante la instrucción Transact-SQL BEGIN TRANSACTION.

Las transacciones se controlan con el MsDb2Connection objeto . Puede iniciar una transacción local con el método BeginTransaction. Una vez que haya iniciado una transacción, puede agregar un comando a esa transacción con la Transaction propiedad de un MsDb2Command objeto . Luego, puede confirmar o revertir las modificaciones realizadas en el origen de datos según el resultado correcto o incorrecto de los componentes de la transacción.

Hay tres comandos básicos para las transacciones: BEGIN, COMMIT y ROLLBACK. La instrucción BEGIN marca el principio de una transacción. Todos los procedimientos intentados después de la instrucción BEGIN se consideran parte de la transacción, que se completa con la instrucción COMMIT o se cancelan mediante la instrucción ROLLBACK.

Para realizar una transacción

  1. Llame MsDb2Connection.BeginTransaction a para marcar el inicio de la transacción.

    BeginTransaction devuelve una referencia a la transacción. Conserve esta referencia para poder asignarla a los comandos que están inscritos en la transacción.

  2. Asigne la transacción a que MsDb2Command.Transaction se va a ejecutar.

    Si se ejecuta un comando en una conexión con una transacción activa TransactionTransactionCommandy el objeto no se ha asignado a la propiedad de , MsDb2Exception se produce una excepción .

  3. Ejecute los comandos necesarios.

  4. Llame MsDb2Transaction.Commit a para completar la transacción o llame a MsDb2Transaction.Rollback para cancelar la transacción.

    Si la conexión se cierra o elimina antes de que se hayan ejecutado los métodos Commit o Rollback, la transacción se revierte.

    En el ejemplo de código siguiente se muestra cómo realizar una transacción.

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  
  

Vea también

Uso del proveedor administrado para DB2