Транзкакции Возвращение Результата
От: vvv848165@ya.ru  
Дата: 18.03.20 06:48
Оценка:
А можно ли в MySQL посреди транзакции выполнить "SELECT LAST_INSERT_ID()" и потом как-то получить результат?
Что-то не доганяю как сделать и примеров вроде не нашёл...
заранее спасибо!
Re: Транзкакции Возвращение Результата
От: vvv848165@ya.ru  
Дата: 18.03.20 10:02
Оценка:
Здравствуйте, 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;

выводит индекс какой надо !!! но как так можно его в С# сделать???

вобще не догоняю...
Re: Транзкакции Возвращение Результата
От: vvv848165@ya.ru  
Дата: 18.03.20 11:28
Оценка:
Неужели с таким никто не сталкивался ...
неужели это такая редкость???
Re[2]: Транзкакции Возвращение Результата
От: Sinclair Россия https://github.com/evilguest/
Дата: 19.03.20 09:50
Оценка:
Здравствуйте, vvv848165@ya.ru, Вы писали:


VYR>вобще не догоняю...

А в чём проблема-то?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[3]: Транзкакции Возвращение Результата
От: vvv848165@ya.ru  
Дата: 20.03.20 06:32
Оценка:
Здравствуйте, Sinclair, Вы писали:
VYR>>вобще не догоняю...
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();


как получить правильный result2 без зависания и падения???
Re[4]: Транзкакции Возвращение Результата
От: Sinclair Россия https://github.com/evilguest/
Дата: 20.03.20 06:46
Оценка:
Здравствуйте, 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. Приведите исключения или результаты, которые вас не устраивают.

Телепатически обнаружить проблему не удаётся.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[5]: Транзкакции Возвращение Результата
От: vvv848165@ya.ru  
Дата: 20.03.20 07:25
Оценка:
S>Схема кода — верная. Непонятно, что вы имеете в виду под "зависанием" и "падениями". Если хотите, чтобы вам помогли,
S>1. Приведите настоящий код.
там 2 страницы кода прогнозируется — не хочу заранее писать нерабочий код
S>2. Приведите исключения или результаты, которые вас не устраивают.
а result2 вы как узнаете? ведь trans.Commit(); после него!!! (получеш 0 в лучшем случае) (а если ExecuteReader то исключение накроет — не закрытый ридер )
S>Телепатически обнаружить проблему не удаётся.
да посмотри на то что ты написал!!!

кажись возвращаемые значения из транзакции так просто не вытащить (((
Re[6]: Транзкакции Возвращение Результата
От: Sinclair Россия https://github.com/evilguest/
Дата: 20.03.20 10:41
Оценка:
Здравствуйте, vvv848165@ya.ru, Вы писали:
S>>Схема кода — верная. Непонятно, что вы имеете в виду под "зависанием" и "падениями". Если хотите, чтобы вам помогли,
S>>1. Приведите настоящий код.
VYR>там 2 страницы кода прогнозируется — не хочу заранее писать нерабочий код
Напишите минимальный пример, который воспроизводит проблему.
S>>2. Приведите исключения или результаты, которые вас не устраивают.
VYR>а result2 вы как узнаете?
Очень просто — ведь C# язык императивный. Выполнит команду, получит результат.
Вы что, не пробовали собственно код выполнить???
VYR>ведь trans.Commit(); после него!!! (получеш 0 в лучшем случае) (а если ExecuteReader то исключение накроет — не закрытый ридер )
С чего вы это взяли?
VYR>кажись возвращаемые значения из транзакции так просто не вытащить (((
Ну конечно вытащить. Транзакция ни при чём — она не определяет момент выполнения батча.
Можно запросто выполнить стейтмент, получить результат, и стоять в открытой транзакции, пока серверу не надоест.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[7]: Транзкакции Возвращение Результата
От: vvv848165@ya.ru  
Дата: 20.03.20 11:21
Оценка:
Здравствуйте, Sinclair, Вы писали:


S>С чего вы это взяли?

уже проверил
в C# всегда 0 (даже когда строк уйма)
а в HS правильное число(счётчик последней добавленной строки)
Re[7]: Транзкакции Возвращение Результата
От: vvv848165@ya.ru  
Дата: 20.03.20 11:26
Оценка: -1
Здравствуйте, Sinclair, Вы писали:

S>Ну конечно вытащить. Транзакция ни при чём — она не определяет момент выполнения батча.

S>Можно запросто выполнить стейтмент, получить результат, и стоять в открытой транзакции, пока серверу не надоест.
я вобще не понял что ты втираешь
Commit() запускает выполнение и возвращает только когда всё сделано (или ошибка)(с учётом изоляции)
как переменная result2 может измениться после Commit()? ведь она просто переменная
Re[8]: Транзкакции Возвращение Результата
От: Sinclair Россия https://github.com/evilguest/
Дата: 20.03.20 13:12
Оценка:
Здравствуйте, vvv848165@ya.ru, Вы писали:
S>>Можно запросто выполнить стейтмент, получить результат, и стоять в открытой транзакции, пока серверу не надоест.
VYR>я вобще не понял что ты втираешь
Это я вижу.
VYR>Commit() запускает выполнение и возвращает только когда всё сделано (или ошибка)(с учётом изоляции)
С чего бы это вдруг?
Commit запускает сохранение внесённых изменений.

VYR>как переменная result2 может измениться после Commit()? ведь она просто переменная

Она должна быть правильная сразу. Похоже, у вас в программе опечатка — result2 должен браться из cmd2.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[6]: Транзкакции Возвращение Результата
От: · Великобритания  
Дата: 20.03.20 13:13
Оценка:
Здравствуйте, vvv848165@ya.ru, Вы писали:

v> кажись возвращаемые значения из транзакции так просто не вытащить (((

У тебя какая-то странная терминология, наверное ты что-то не так понимаешь, отсюда и проблемы.
Транзакция никаких значений не имеет и вытаскивать оттуда нечего. Значения вытаскиваются из результатов select-запросов, самым обычным способом. Транзакция лишь обеспечивает целостность результатов с в условиях конкурентных запросов.
avalon/2.0.6
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[7]: Транзкакции Возвращение Результата
От: VVVa  
Дата: 26.03.20 07:15
Оценка:
Здравствуйте, ·, Вы писали:

·>Транзакция никаких значений не имеет и вытаскивать оттуда нечего. Значения вытаскиваются из результатов select-запросов, самым обычным способом. Транзакция лишь обеспечивает целостность результатов с в условиях конкурентных запросов.


а если я хочу посреди транзакции вызвать select и после транзакции посмотреть на результат- как это сделать в С# ???
Re[8]: Транзкакции Возвращение Результата
От: · Великобритания  
Дата: 26.03.20 09:05
Оценка: +1
Здравствуйте, VVVa, Вы писали:

VVV>·>Транзакция никаких значений не имеет и вытаскивать оттуда нечего. Значения вытаскиваются из результатов select-запросов, самым обычным способом. Транзакция лишь обеспечивает целостность результатов с в условиях конкурентных запросов.

VVV>а если я хочу посреди транзакции вызвать select и после транзакции посмотреть на результат- как это сделать в С# ???
Закрой глаза перед select и открой их после транзакции.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.