OracleConnection conn = new OracleConnection ("DSN=consroot;uid=system");
conn.Open();
IDbTransaction trans = conn.BeginTransaction();
OracleCommand cmd = (OracleCommand)conn.CreateCommand();
cmd.CommandText = "INSERT INTO ...";
cmd.ExecuteNonQuery();
trans.RollbackTransaction();
cmd.Dispose();
conn.Close();
c using и ДБ плугином и Oracle managed access. Но думаю, подробности не принципиальны.
Когда после выполнения теста смотрю ТОАД-ом — строка с INSERT находится в базе. Появляется сразу после ExecuteNonQuery.
Пока только нашел, что если после изменения данных выполнять запрос на создание таблицы, например, то измение данных предварительно коммитится.
Что еще можно проверить?
Re: Оракле 11, отчего может транзакция не откатыватся?
Здравствуйте, AlexNek, Вы писали:
AN>Пока только нашел, что если после изменения данных выполнять запрос на создание таблицы, например, то измение данных предварительно коммитится. AN>Что еще можно проверить?
Так вроде в Оракле все DDL операции приводят к коммиту транзакции?
К сожалению, в действительности все выглядит иначе, чем на самом деле.
Re[2]: Оракле 11, отчего может транзакция не откатыватся?
Здравствуйте, AlexNek, Вы писали:
AN>Когда после выполнения теста смотрю ТОАД-ом — строка с INSERT находится в базе. Появляется сразу после ExecuteNonQuery.
Во многих библиотеках есть идиотская опция AUTOCOMMIT. По описанию очень похоже на её действие. Поищите какой-нибудь conn.setAutoCommit(false).
Re[2]: Оракле 11, отчего может транзакция не откатыватся?
Здравствуйте, Softwarer, Вы писали:
S>Здравствуйте, AlexNek, Вы писали:
AN>>Когда после выполнения теста смотрю ТОАД-ом — строка с INSERT находится в базе. Появляется сразу после ExecuteNonQuery.
S>Во многих библиотеках есть идиотская опция AUTOCOMMIT. По описанию очень похоже на её действие. Поищите какой-нибудь conn.setAutoCommit(false).
искал уже, даже исходники смотрел, нет ничего подобного, только по ссылке, что привел можно найти "BeginTransaction(); // Turn off AUTOCOMMIT"
Думал уже может в таблице есть триггер с коммитом — неа
Re[2]: Оракле 11, отчего может транзакция не откатыватся?
Здравствуйте, Tigor, Вы писали:
T>Здравствуйте, AlexNek, Вы писали:
AN>>Пока только нашел, что если после изменения данных выполнять запрос на создание таблицы, например, то измение данных предварительно коммитится. AN>>Что еще можно проверить?
T>Так вроде в Оракле все DDL операции приводят к коммиту транзакции? отсюда
The DDL statements are:
ALTER ... (All statements beginning with ALTER)
ANALYZE
ASSOCIATE STATISTICS
AUDIT
COMMENT
CREATE ... (All statements beginning with CREATE)
DISASSOCIATE STATISTICS
DROP ... (All statements beginning with DROP)
FLASHBACK ... (All statements beginning with FLASHBACK)
GRANT
NOAUDIT
PURGE
RENAME
REVOKE
TRUNCATE
Это тоже нашел, написал в самом начале.
Нет ничего подобного.
Хотя какой нибудь SQL трасе не помешал бы.
Re: Оракле 11, отчего может транзакция не откатыватся?
Так вроде так и есть. Код просто по ссылке скопировал и заменил "коммит" вот эта ссылка больше подходит.
Попробую еще завтра абсолютно точно так сделать.
Re[3]: Оракле 11, отчего может транзакция не откатыватся?
AN>Так вроде так и есть. Код просто по ссылке скопировал и заменил "коммит" AN>вот эта ссылка больше подходит. AN>Попробую еще завтра абсолютно точно так сделать.
У вас вместо OracleTransaction написано IDbTransaction и вместо Rollback() написано RollbackTransaction(). Я .NET особо не знаю, но выглядят как разные методы. Может быть у оракла своё API.
Re[4]: Оракле 11, отчего может транзакция не откатыватся?
AN>>Так вроде так и есть. Код просто по ссылке скопировал и заменил "коммит" AN>>вот эта ссылка больше подходит. AN>>Попробую еще завтра абсолютно точно так сделать.
vsb>У вас вместо OracleTransaction написано IDbTransaction и вместо Rollback() написано RollbackTransaction(). Я .NET особо не знаю, но выглядят как разные методы. Может быть у оракла своё API.
Да, это только в приведенном коде так. Хотел показать только принцип, как делаю. Да и на работе точно такого кода нет, есть вызовы различных классов, которые делают тоже самое.
Re: Оракле 11, отчего может транзакция не откатыватся?
Как переключил плагины с Оракла на MSSQL и там оказалось тоже самое, понял, что проблема может быть только в моем коде и что то не то с "соединением".
Начал рыть именно в эту сторону и нашел что соединение возвращаемое BeginTransaction неправильно сохраняется и после используется другой инстансе.
Re: Оракле 11, отчего может транзакция не откатыватся?
Здравствуйте, AlexNek, Вы писали:
AN>Когда после выполнения теста смотрю ТОАД-ом — строка с INSERT находится в базе. Появляется сразу после ExecuteNonQuery.
AN>Пока только нашел, что если после изменения данных выполнять запрос на создание таблицы, например, то измение данных предварительно коммитится. AN>Что еще можно проверить?
Автокоммит включен по умолчанию для этой библиотеки.
Надо выключать.
Как -- не знаю. читай доку.