よくわかりません。一見すると、C# でトランザクションを実行するのは簡単に思えます。ここから:
http://docs.oracle.com/cd/B19306_01/win.102/b14307/OracleTransactionClass.htm
string constr = "User Id=scott;Password=tiger;Data Source=oracle";
OracleConnection con = new OracleConnection(constr);
con.Open();
OracleCommand cmd = con.CreateCommand();
cmd.CommandText = "SELECT COUNT(*) FROM MyTable";
// Start a transaction
OracleTransaction txn = con.BeginTransaction(
IsolationLevel.ReadCommitted);
try
{
// Insert the same row twice into MyTable
cmd.CommandText = "INSERT INTO MyTable VALUES (1)";
cmd.ExecuteNonQuery();
cmd.ExecuteNonQuery(); // This may throw an exception
txn.Commit();
}....
したがって、接続を作成し、その接続でトランザクションを開始してから、コミットまたはロールバックするまでオフにします。
ただし、次のような他のソース:
https://forums.oracle.com/thread/319121
OracleCommand オブジェクト自体の Transaction プロパティを設定することを推奨します。例えば
cmd.Transaction = txn;
さらに、このプロパティは読み取り専用であると言う情報源もあります。実際には読み取り専用ではありませんが、それが何をするのかを明確に示している場所はどこにもありません。
したがって、私の混乱は、 OracleCommand オブジェクトに Transaction プロパティが存在することは、そのコマンドをトランザクションの一部として実行するために使用する必要があることを示唆しているように見えるのに、Oracle 自身のドキュメントではこのプロパティを使用していないことです。それで、それは何のためですか?
だから私の質問は:
- OracleCommand の Transaction プロパティを設定する必要がありますか?もしそうなら、これは正確に何をしますか?
- 接続でトランザクションを開始した場合、その接続で (コミットまたはロールバックまで) 実行される後続のすべてのコマンドは、それらのコマンドで Transaction プロパティを設定しなくても、そのトランザクションの一部ですか?