トランザクションのサポート
通常、ルール エンジンではトランザクションがサポートされません。 ただし、次の手順に示すように DataConnection オブジェクトを使用して、トランザクション形式でデータベースを更新できます。
接続文字列を使用して SqlConnection オブジェクトを作成し、接続を開きます。
SqlConnection connection = new SqlConnection("Initial Catalog=Northwind;Data Source=(local);Integrated Security=SSPI;"); connection.Open();
手順 1 で作成した接続オブジェクトで BeginTransaction メソッドを呼び出して、SqlTransaction オブジェクトを作成します。
SqlTransaction transaction = connection.BeginTransaction();
手順 1 と 2 で作成した接続オブジェクトとトランザクション オブジェクトを使用して 、DataConnection オブジェクトを作成します。
DataConnection dc = new DataConnection(datasetName, tableName, connection, transaction);
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);
データ接続オブジェクトで Update メソッドを呼び出します。 ポリシーの実行時に処理される更新は、すべてメモリ内だけで実行されます。 データベースを更新するには、データ接続オブジェクトで Update メソッドを呼び出す必要があります。
dc.Update();
次に、独自のロジックに基づいて、データ接続オブジェクトで 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();
接続を閉じ、ポリシー オブジェクトを破棄します。
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 メソッドをそれぞれ呼び出します。