Freigeben über


Transaktionsunterstützung

Im Allgemeinen unterstützt die Regel-Engine keine Transaktionen. Sie können eine Datenbank jedoch transaktionsgesteuert aktualisieren, indem Sie das DataConnection-Objekt verwenden, wie in den folgenden Schritten gezeigt:

  1. Erstellen Sie mithilfe eines Verbindungszeichenfolge ein SqlConnection-Objekt, und öffnen Sie die Verbindung.

    SqlConnection connection = new SqlConnection("Initial Catalog=Northwind;Data Source=(local);Integrated Security=SSPI;");  
    connection.Open();  
    
  2. Erstellen Sie ein SqlTransaction-Objekt , indem Sie die BeginTransaction-Methode für das Verbindungsobjekt aufrufen, das Sie in Schritt 1 erstellt haben.

    SqlTransaction transaction = connection.BeginTransaction();  
    
  3. Erstellen Sie ein DataConnection-Objekt mithilfe der Verbindungs- und Transaktionsobjekte, die Sie in den Schritten 1 und 2 erstellt haben.

    DataConnection dc = new DataConnection(datasetName, tableName, connection, transaction);  
    
  4. Übergeben Sie das DataConnection-Objekt als Tatsache zusammen mit allen anderen Fakten, die Sie an die Richtlinie übergeben möchten, und führen Sie die Richtlinie aus.

    //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. Rufen Sie die Update-Methode für das Datenverbindungsobjekt auf. Alle während der Ausführung der Richtlinie ausgeführten Aktualisierungen werden nur im Speicher ausgeführt. Sie müssen die Update-Methode für das Datenverbindungsobjekt aufrufen, um die Datenbank zu aktualisieren.

    dc.Update();  
    
  6. Rufen Sie nun Commit oder Rollback für das Datenverbindungsobjekt basierend auf Ihrer eigenen Logik auf.

    //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. Schließen Sie die Verbindung, und geben Sie das Richtlinienobjekt frei.

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

    Dies ist der vollständige Code mit allen Schritten:

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();  

Kommentare

  • Sie können auch die OleDbConnection - und OleDbTransaction-Objekte verwenden, anstatt die SqlConnection - und SqlTransaction-Objekte zu verwenden, um Datenbankupdates auf transaktionale Weise durchzuführen.

  • Alle von der Richtlinie vorgenommenen Änderungen werden im Speicher vorgenommen. Sie müssen die Update-Methode für das DataConnection-Objekt aufrufen, um die Datenbank zu aktualisieren.

  • Sie können entweder einen Commit oder ein Rollback für die Transaktion ausführen, indem Sie die Commit - oder Rollback-Methode der DataConnection-Objekte aufrufen.