Comment effectuer des transactions avec une base de données DB2

Les transactions sont un groupe d’opérations de base de données combinées en une unité logique de travail, et sont utilisées pour contrôler et maintenir la cohérence et l’intégrité de chaque base de données malgré les erreurs qui peuvent se produire dans le système. Une transaction se compose d’une série d’instructions SQL SELECT, INSERT, UPDATE ou DELETE. Si aucune erreur ne se produit pendant une transaction, toutes les modifications apportées à la transaction deviennent une partie permanente de la base de données. Si des erreurs se produisent, aucune des modifications n’est apportée à la base de données.

Une transaction est considérée comme locale quand il s’agit d’une transaction monophase et qu’elle est gérée directement par la base de données. Les transactions sont considérées comme distribuées lorsqu’elles sont coordonnées par un moniteur de transaction et utilisent des mécanismes de prévention de défaillance (tels qu’une validation en deux phases) pour la résolution des transactions.

Notes

Les transactions ont une efficacité maximale quand elles sont exécutées sur le serveur. Si vous utilisez une base de données SQL Server qui utilise largement des transactions explicites, vous devez envisager de les écrire en tant que procédures stockées à l’aide de l’instruction Transact-SQL BEGIN TRANSACTION.

Vous contrôlez les transactions avec l’objet MsDb2Connection . Vous pouvez initier une transaction locale avec la méthode BeginTransaction. Une fois que vous avez commencé une transaction, vous pouvez inscrire une commande dans cette transaction avec la Transaction propriété d’un MsDb2Command objet . Vous pouvez ensuite valider ou annuler les modifications apportées à la source de données en fonction de la réussite ou de l’échec des composants de la transaction.

Il existe trois commandes de base pour les transactions : BEGIN, COMMIT et ROLLBACK. L’instruction BEGIN marque le début d’une transaction. Toutes les procédures tentées après l’instruction BEGIN sont considérées comme faisant partie de la transaction, qui est terminée par l’instruction COMMIT, ou annulée par l’instruction ROLLBACK.

Pour effectuer une transaction

  1. Appelez MsDb2Connection.BeginTransaction pour marquer le début de la transaction.

    BeginTransaction retourne une référence à la transaction. Conservez cette référence afin de pouvoir l’affecter aux commandes inscrites dans la transaction.

  2. Affectez la transaction au MsDb2Command.Transaction à exécuter.

    Si une commande est exécutée sur une connexion avec une transaction active et que l’objet Transaction n’a pas été affecté à la Transaction propriété du Command, un MsDb2Exception est levée.

  3. Exécutez les commandes requises.

  4. Appelez MsDb2Transaction.Commit pour terminer la transaction ou appelez MsDb2Transaction.Rollback pour annuler la transaction.

    Si la connexion est fermée ou libérée avant que l’une des méthodes Commit ou Rollback ait été exécutée, la transaction est annulée.

    L’exemple de code suivant montre comment effectuer une transaction.

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  
  

Voir aussi

Utilisation du fournisseur managé pour DB2