Exécution d'un Oracle de la Transaction à l'aide de C# et ODP.NET

Je suis confus. Sur le visage de celui-ci, l'exécution d'une transaction en C# semble
simple. À partir d'ici:

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

Afin, de créer une connexion, d'entamer une transaction sur cette connexion, et puis vous aller jusqu'à ce que vous voulez faire un commit ou rollback.

Cependant, d'autres sources, comme ici:

https://forums.oracle.com/thread/319121

avocat réglage de la Transaction de propriété de l'objet OracleCommand lui-même. par exemple,

cmd.Transaction = txn;

Encore d'autres sources disent que cette propriété est en lecture seule. Ce n'est pas vraiment lire
seulement, mais n'apparaît nulle part de dire clairement ce qu'il fait.

Ma confusion, donc, est que l'existence de la Transaction
propriété sur l'objet OracleCommand semble suggérer qu'il devrait
être utilisée pour exécuter cette commande dans le cadre d'une transaction, et encore
Oracle propre documentation ne pas utiliser cette propriété. Alors, quel est-il
pour?

Donc mes questions sont:

  1. faire j'ai besoin de régler la Transaction de propriété de mon OracleCommand, et
    si oui, qu'est-ce exactement est-ce que cela?
  2. Si j'ai commencé une opération sur une connexion, sont TOUS les
    les commandes effectuées sur cette connexion (jusqu'à ce qu'un commit ou rollback) le cadre de cette opération, même si je n'ai pas l'ensemble de la Transaction
    bien sur ces commandes?
la documentation oracle est terrible. Je viens de regarder à l'exact même exemple et il n'est pas évident de savoir comment l'opération de commande et de la réalité se rapportent les uns aux autres - qu'ils apparaissent à travailler à travers l'éther, ce qui est assez inquiétant. Je pense que la solution est de le comprendre, une fois, puis les envelopper l'API de cacher tous les fous!

OriginalL'auteur bornfromanegg | 2013-09-21