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:
- 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? - 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?
OriginalL'auteur bornfromanegg | 2013-09-21
Vous devez vous connecter pour publier un commentaire.
Pas.
C'est un no-op.
La
OracleCommand
automatiquement "réutilise" l'opération qui est actuellement active sur la commande duOracleConnection
. LeTransaction
bien est-il tout simplement parce qu'il a été déclaré dans la classe de base (DbCommand
) et vous ne pouvez pas "undeclare" un membre dans la classe héritée. Si vous l'avez lu, vous aurez la connexion de la transaction (le cas échéant), la valeur ne fait rien.Exactement.
OriginalL'auteur Branko Dimitrijevic