Partager via


Prise en charge des transactions

En règle générale, le moteur de règles ne prend pas en charge les transactions. Toutefois, vous pouvez mettre à jour une base de données de manière transactionnelle à l’aide de l’objet DataConnection , comme indiqué dans les étapes suivantes :

  1. Créez un objet SqlConnection à l’aide d’un chaîne de connexion et ouvrez la connexion.

    SqlConnection connection = new SqlConnection("Initial Catalog=Northwind;Data Source=(local);Integrated Security=SSPI;");  
    connection.Open();  
    
  2. Créez un objet SqlTransaction en appelant la méthode BeginTransaction sur l’objet de connexion que vous avez créé à l’étape 1.

    SqlTransaction transaction = connection.BeginTransaction();  
    
  3. Créez un objet DataConnection à l’aide des objets de connexion et de transaction que vous avez créés aux étapes 1 et 2.

    DataConnection dc = new DataConnection(datasetName, tableName, connection, transaction);  
    
  4. Transmettez l’objet DataConnection en tant que fait ainsi que tous les autres faits que vous souhaitez transmettre à la stratégie, puis exécutez la stratégie.

    //Passing a .NET object as a fact along with the data connection  
    MyClass obj = new MyClass();  
    object[] facts = new object[2];  
    facts[0] = dc;  
    facts[1] = obj;  
    Policy pol = new Policy(policyName);  
    policy.Execute(facts);    
    
  5. Appelez la méthode Update sur l’objet de connexion de données. Toutes les mises à jour effectuées pendant l'exécution de la stratégie sont uniquement apportées dans la mémoire. Vous devez appeler la méthode Update sur l’objet de connexion de données pour mettre à jour la base de données.

    dc.Update();  
    
  6. À présent, appelez Commit ou Rollback sur l’objet de connexion de données en fonction de votre propre logique.

    //Checking the value of PropertyA in .net object   
    //to decide whether to commit or rollback  
    if (obj.PropertyA == true)  
    transaction.Commit();  
    else  
    transaction.Rollback();  
    
    
  7. Fermez la connexion, puis supprimez l'objet stratégie.

    sqlCon.Close();  
    policy.Dispose();  
    

    Code complet de l'ensemble de la procédure :

SqlConnection connection = new SqlConnection("Initial Catalog=Northwind;Data Source=(local);Integrated Security=SSPI;");  
connection.Open();  
SqlTransaction transaction = connection.BeginTransaction();  
DataConnection dc = new DataConnection(datasetName, tableName, connection, transaction);  
MyClass obj = new MyClass();  
object[] facts = new object[2];  
facts[0] = dc;  
facts[1] = obj;  
Policy pol = new Policy(policyName);  
policy.Execute(facts);    
dc.Update();  
if (obj.PropertyA == true)  
transaction.Commit();  
else  
transaction.Rollback();  
sqlCon.Close();  
policy.Dispose();  

Commentaires

  • Vous pouvez également utiliser les objets OleDbConnection et OleDbTransaction au lieu d’utiliser les objets SqlConnection et SqlTransaction pour effectuer des mises à jour de base de données de manière transactionnelle.

  • Toutes les modifications effectuées à partir de la stratégie sont uniquement apportées dans la mémoire. Vous devez appeler la méthode Update sur l’objet DataConnection pour mettre à jour la base de données.

  • Vous pouvez valider ou restaurer la transaction en appelant respectivement la méthode Commit ou Rollback des objets DataConnection .