Выполнение транзакции Oracle с использованием C# и ODP.NET
Я в замешательстве. На первый взгляд, выполнение транзакции в 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
advocate установка свойства транзакции самого объекта OracleCommand. например,
cmd.Transaction = txn;
другие источники говорят, что это свойство доступно только для чтения. Это на самом деле не читал только, но нигде четко не сказано, что он делает.
моя путаница, следовательно, заключается в том, что существование транзакции свойство объекта OracleCommand, по-видимому, предполагает, что оно должно быть используется для выполнения этой команды как части транзакции, и все же Собственная документация Oracle не использует это свойство. Так что это для?
Итак, мои вопросы:
- мне нужно установить свойство транзакции моего OracleCommand, и если да, то что именно это делает?
- если я начал транзакцию по соединению, все последующие команды, выполняемые для этого соединения (до фиксации или отката) части этой транзакции, даже если я этого не делаю набор проводки собственность на эти команды?
1 ответов
1) мне нужно установить свойство транзакции моего OracleCommand,
нет.
и если да, то что именно это делает?
это нет.
на OracleCommand
автоматически "повторно использует" транзакцию, которая в настоящее время активна в команде OracleConnection
. The Transaction
свойство существует просто потому, что оно было объявлено в базовом классе (DbCommand
) и вы не можете "undeclare" член в унаследованном классе. Если Вы читаете его, вы получите транзакцию соединения (если она есть), установив, что она ничего не делает.
2) Если я начал транзакцию в соединении, выполняются ли все последующие команды в этом соединении (до фиксации или отката) частью этой транзакции, даже если я не устанавливаю свойство транзакции в этих командах?
точно.