Condividi tramite


Supporto delle transazioni

In generale le transazioni non sono supportate dal Motore regole di business. È tuttavia possibile aggiornare un database in modo transazionale usando l'oggetto DataConnection , come illustrato nella procedura seguente:

  1. Creare un oggetto SqlConnection usando un stringa di connessione e aprire la connessione.

    SqlConnection connection = new SqlConnection("Initial Catalog=Northwind;Data Source=(local);Integrated Security=SSPI;");  
    connection.Open();  
    
  2. Creare un oggetto SqlTransaction chiamando il metodo BeginTransaction nell'oggetto connection creato nel passaggio 1.

    SqlTransaction transaction = connection.BeginTransaction();  
    
  3. Creare un oggetto DataConnection usando gli oggetti connessione e transazione creati nei passaggi 1 e 2.

    DataConnection dc = new DataConnection(datasetName, tableName, connection, transaction);  
    
  4. Passare l'oggetto DataConnection come fatto insieme ad altri fatti che si desidera passare ai criteri ed eseguire i criteri.

    //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. Richiamare il metodo Update nell'oggetto connessione dati. Tutti gli aggiornamenti eseguiti durante l'esecuzione del criterio vengono eseguiti solo in memoria. È necessario chiamare il metodo Update nell'oggetto connessione dati per aggiornare il database.

    dc.Update();  
    
  6. A questo punto, richiamare Commit o Rollback nell'oggetto connessione dati in base alla propria logica.

    //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. Chiudere la connessione ed eliminare l'oggetto criterio.

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

    Di seguito è riportato il codice completo di tutti i passaggi:

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

Commenti

  • È anche possibile usare gli oggetti OleDbConnection e OleDbTransaction anziché usare gli oggetti SqlConnection e SqlTransaction per eseguire gli aggiornamenti del database in modo transazionale.

  • Tutte le modifiche apportate dal criterio vengono eseguite in memoria. È necessario richiamare il metodo Update nell'oggetto DataConnection per aggiornare il database.

  • È possibile eseguire il commit o il rollback della transazione richiamando rispettivamente il metodo Commit o Rollback degli oggetti DataConnection.