А можно ли в MySQL посреди транзакции выполнить "SELECT LAST_INSERT_ID()" и потом как-то получить результат?
Что-то не доганяю как сделать и примеров вроде не нашёл...
заранее спасибо!
Здравствуйте, vvv848165@ya.ru, Вы писали:
VYR>А можно ли в MySQL посреди транзакции выполнить "SELECT LAST_INSERT_ID()" и потом как-то получить результат? VYR>Что-то не доганяю как сделать и примеров вроде не нашёл... VYR>заранее спасибо!
в HS работает!!!
set autocommit=0;
Start transaction;
INSERT INTO tt (ttt) VALUES(13);
SELECT LAST_INSERT_ID();
INSERT INTO tt (ttt) VALUES(13);
commit;
выводит индекс какой надо !!! но как так можно его в С# сделать???
Здравствуйте, vvv848165@ya.ru, Вы писали: S>>А в чём проблема-то?
MySqlTransaction trans = conn.BeginTransaction();
for(...)
{
MySqlCommand cmd = new MySqlCommand("INSERT INTO ...", conn, trans);
cmd.ExecuteNonQuery();
MySqlCommand cmd2 = new MySqlCommand("SELECT LAST_INSERT_ID();", conn, trans);
object result2=cmd.ExecuteScalar();
for(...)
{
MySqlCommand cmd3 = new MySqlCommand("INSERT INTO ...", conn, trans);
cmd3.ExecuteNonQuery();
}
}
trans.Commit();
VYR>как получить правильный result2 без зависания и падения???
Схема кода — верная. Непонятно, что вы имеете в виду под "зависанием" и "падениями". Если хотите, чтобы вам помогли,
1. Приведите настоящий код.
2. Приведите исключения или результаты, которые вас не устраивают.
Телепатически обнаружить проблему не удаётся.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
S>Схема кода — верная. Непонятно, что вы имеете в виду под "зависанием" и "падениями". Если хотите, чтобы вам помогли, S>1. Приведите настоящий код.
там 2 страницы кода прогнозируется — не хочу заранее писать нерабочий код S>2. Приведите исключения или результаты, которые вас не устраивают.
а result2 вы как узнаете? ведь trans.Commit(); после него!!! (получеш 0 в лучшем случае) (а если ExecuteReader то исключение накроет — не закрытый ридер ) S>Телепатически обнаружить проблему не удаётся.
да посмотри на то что ты написал!!!
кажись возвращаемые значения из транзакции так просто не вытащить (((
Здравствуйте, vvv848165@ya.ru, Вы писали: S>>Схема кода — верная. Непонятно, что вы имеете в виду под "зависанием" и "падениями". Если хотите, чтобы вам помогли, S>>1. Приведите настоящий код. VYR>там 2 страницы кода прогнозируется — не хочу заранее писать нерабочий код
Напишите минимальный пример, который воспроизводит проблему. S>>2. Приведите исключения или результаты, которые вас не устраивают. VYR>а result2 вы как узнаете?
Очень просто — ведь C# язык императивный. Выполнит команду, получит результат.
Вы что, не пробовали собственно код выполнить??? VYR>ведь trans.Commit(); после него!!! (получеш 0 в лучшем случае) (а если ExecuteReader то исключение накроет — не закрытый ридер )
С чего вы это взяли? VYR>кажись возвращаемые значения из транзакции так просто не вытащить (((
Ну конечно вытащить. Транзакция ни при чём — она не определяет момент выполнения батча.
Можно запросто выполнить стейтмент, получить результат, и стоять в открытой транзакции, пока серверу не надоест.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Ну конечно вытащить. Транзакция ни при чём — она не определяет момент выполнения батча. S>Можно запросто выполнить стейтмент, получить результат, и стоять в открытой транзакции, пока серверу не надоест.
я вобще не понял что ты втираешь
Commit() запускает выполнение и возвращает только когда всё сделано (или ошибка)(с учётом изоляции)
как переменная result2 может измениться после Commit()? ведь она просто переменная
Здравствуйте, vvv848165@ya.ru, Вы писали: S>>Можно запросто выполнить стейтмент, получить результат, и стоять в открытой транзакции, пока серверу не надоест. VYR>я вобще не понял что ты втираешь
Это я вижу. VYR>Commit() запускает выполнение и возвращает только когда всё сделано (или ошибка)(с учётом изоляции)
С чего бы это вдруг?
Commit запускает сохранение внесённых изменений.
VYR>как переменная result2 может измениться после Commit()? ведь она просто переменная
Она должна быть правильная сразу. Похоже, у вас в программе опечатка — result2 должен браться из cmd2.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, vvv848165@ya.ru, Вы писали:
v> кажись возвращаемые значения из транзакции так просто не вытащить (((
У тебя какая-то странная терминология, наверное ты что-то не так понимаешь, отсюда и проблемы.
Транзакция никаких значений не имеет и вытаскивать оттуда нечего. Значения вытаскиваются из результатов select-запросов, самым обычным способом. Транзакция лишь обеспечивает целостность результатов с в условиях конкурентных запросов.
Здравствуйте, ·, Вы писали:
·>Транзакция никаких значений не имеет и вытаскивать оттуда нечего. Значения вытаскиваются из результатов select-запросов, самым обычным способом. Транзакция лишь обеспечивает целостность результатов с в условиях конкурентных запросов.
а если я хочу посреди транзакции вызвать select и после транзакции посмотреть на результат- как это сделать в С# ???
Здравствуйте, VVVa, Вы писали:
VVV>·>Транзакция никаких значений не имеет и вытаскивать оттуда нечего. Значения вытаскиваются из результатов select-запросов, самым обычным способом. Транзакция лишь обеспечивает целостность результатов с в условиях конкурентных запросов. VVV>а если я хочу посреди транзакции вызвать select и после транзакции посмотреть на результат- как это сделать в С# ???
Закрой глаза перед select и открой их после транзакции.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай