共用方式為


異動支援

一般而言,規則引擎不支援交易。 不過,您可以使用 DataConnection 物件,以交易方式更新資料庫,如下列步驟所示:

  1. 使用連接字串建立SqlConnection物件,然後開啟連接。

    SqlConnection connection = new SqlConnection("Initial Catalog=Northwind;Data Source=(local);Integrated Security=SSPI;");  
    connection.Open();  
    
  2. 在您在步驟 1 中建立的連線物件上呼叫BeginTransaction方法,以建立SqlTransaction物件。

    SqlTransaction transaction = connection.BeginTransaction();  
    
  3. 使用您在步驟 1 和 2 中建立的連接和交易對象,建立 DataConnection 物件。

    DataConnection dc = new DataConnection(datasetName, tableName, connection, transaction);  
    
  4. 傳遞 DataConnection 物件做為事實,以及您想要傳遞至原則的任何其他事實,並執行原則。

    //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. 在資料連線物件上叫用 Update 方法。 執行原則時所有更新作業只是在記憶體中完成的。 您必須在資料連線物件上呼叫 Update 方法,才能更新資料庫。

    dc.Update();  
    
  6. 現在,根據您自己的邏輯,在資料連線物件上叫用 認可復原

    //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. 關閉連線,並處置原則物件。

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

    以下是包含所有步驟的完整程式碼:

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

註解

  • 您也可以使用 OleDbConnectionOleDbTransaction 物件,而不是使用 SqlConnectionSqlTransaction 物件,以交易方式執行資料庫更新。

  • 從原則執行的所有修改作業都是在記憶體中完成的。 您必須在DataConnection物件上叫用Update方法,才能更新資料庫。

  • 您可以分別叫用DataConnection物件的CommitRollback方法來認可或復原交易。