Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

トランザクション

CacheTransaction を使用すると、トランザクションでデータベース操作をラップできます。CacheTransaction は、BeginTransactionCommit、および Rollback の各メソッドをサポートしており、これらはそれぞれトランザクションの開始、コミット、ロールバックを実行します。

以下のコードでは、InsertContact を 2 回呼び出しています。これは、1 つのトランザクションで 2 つの呼出しをラップし、この 1 組みの挿入がアトミックな操作となるようにしています。いずれか一方の操作で例外が返された場合は、両方の挿入がロールバックされます。


CacheTransaction trans = null;
try
{
   CacheConnection cnCache = new CacheConnection(conStr);
   cnCache.Open();
   
   trans = cnCache.BeginTransaction();
   InsertContact(cnCache, trans, "Smith,Fred", "Personal");
   InsertContact(cnCache, trans, "Smith,Linda", "Busines");  
   trans.Commit();
}
catch(Exception e)
{
 trans.Rollback();
 Console.WriteLine("Exception: {0}", e.Message);
}        

上記のコードで呼び出された InsertContact メソッドを次に示します。ここで、CacheCommand コンストラクタは、CacheTransaction インスタンスを引数として取ります。


public int InsertContact(CacheConnection cnCache, CacheTransaction trans, 
                                                      string name, string type)
{
  string sql = "Insert into Provider.Contact(Name,ContactType) Values(?,?)";
  CacheCommand command = new CacheCommand(sql, cnCache, trans);

  CacheParameter name_param = new CacheParameter();
  name_param.CacheDbType = CacheDbType.NVarChar;
  name_param.ParameterName = "Name";
  name_param.Direction = ParameterDirection.Input;
  name_param.Value = name;

  CacheParameter type_param = new CacheParameter();
  type_param.CacheDbType = CacheDbType.NVarChar;
  type_param.ParameterName = "ContactType";
  type_param.Direction = ParameterDirection.Input;
  type_param.Value = type;

  command.Parameters.Add(name_param);
  command.Parameters.Add(type_param);
 
  int rows = command.ExecuteNonQuery();

  return rows;
} 

FeedbackOpens in a new tab