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 :
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();
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();
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);
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);
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();
À 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();
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 .