Выполнение транзакции 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
выступают за установку свойства Transaction самого объекта OracleCommand. например
cmd.Transaction = txn;
Еще в других источниках говорится, что это свойство доступно только для чтения. Это на самом деле не только для чтения, но нигде не видно ясно, что он делает.
Поэтому я путаюсь с тем, что существование свойства Transaction в объекте OracleCommand, по-видимому, предполагает, что его следует использовать для выполнения этой команды как части транзакции, и, тем не менее, собственная документация Oracle не использует это свойство. Так для чего это нужно?
Итак, мои вопросы:
мне нужно установить свойство Transaction моей OracleCommand, и если да, что именно это делает?Если я начал транзакцию для соединения, все ли последующие команды, выполняемые для этого соединения (до фиксации или отката), являются частью этой транзакции, даже если я не установил свойство Transaction для этих команд?