Durchführen eine Oracle-Transaktion mithilfe von C# und ODP.NET

Ich bin verwirrt. Auf dem Gesicht von ihm, ist die Durchführung einer Transaktion in C# scheint
einfach. Von hier:

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

So erstellen Sie eine Verbindung, eine Transaktion beginnen, die auf die Verbindung, und dann off gehen, bis Sie möchten, um einen commit oder rollback.

Jedoch andere Quellen, wie zum Beispiel hier:

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

befürworten die Einstellung der Transaction-Eigenschaft des OracleCommand-Objekt selbst. z.B.

cmd.Transaction = txn;

Doch andere Quellen sagen, dass diese Eigenschaft schreibgeschützt ist. Es ist tatsächlich nicht gelesen
nur, aber nirgendwo erscheint, klar zu sagen, was es tut.

Meine Verwirrung daher, dass die Existenz der Transaktion
Immobilie auf der OracleCommand Objekt zu suggerieren scheint, dass es sollte
verwendet werden, um führen Sie diesen Befehl als Teil einer Transaktion, und noch
Oracle-eigene Dokumentation nicht mit dieser Eigenschaft. Also, was ist es
für?

Also meine Fragen sind:

  1. muss ich die Transaction-Eigenschaft von meine OracleCommand, und
    wenn ja, was genau macht das?
  2. Wenn ich angefangen habe, eine Transaktion in einer Verbindung, werden ALLE nachfolgenden
    Befehle durchgeführt, die auf die Verbindung (bis ein commit oder rollback) - Teil der Transaktion, auch wenn ich nicht die Transaktion
    Immobilie auf diese Befehle?
  • in der oracle-Dokumentation ist schrecklich. Ich habe gerade auf der Suche an der exakt gleichen Beispiel und es ist nicht klar, wie die Transaktion und den Befehl tatsächlich zueinander stehen - Sie funktionieren scheinbar durch den äther, das ist ziemlich sorgen. Ich glaube, die Lösung ist, um es herauszufinden einmal und dann wickeln Sie die API zu verbergen, alle die verrückten!
Schreibe einen Kommentar