次の方法で共有


トランザクションのサポート

通常、ルール エンジンではトランザクションがサポートされません。 ただし、次の手順に示すように 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. 次に、独自のロジックに基づいて、データ接続オブジェクトで Commit または Rollback を呼び出します。

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

説明

  • SqlConnection オブジェクトと SqlTransaction オブジェクトを使用してデータベースの更新をトランザクション方式で実行する代わりに、OleDbConnection オブジェクトと OleDbTransaction オブジェクトを使用することもできます。

  • ポリシーによって加えられる変更は、すべてメモリ内で実行されます。 データベースを更新するには、DataConnection オブジェクトで Update メソッドを呼び出す必要があります。

  • トランザクションをコミットまたはロールバックするには、DataConnection オブジェクトの Commit メソッドまたは Rollback メソッドをそれぞれ呼び出します。