Как заставить TableAdapters правильно запустить вставку, а затем SELECT_LAST_ID () - PullRequest
0 голосов
/ 21 апреля 2011

Sniplet:

    int resNo = -1;
    MoviesTableAdapters.reservationTableAdapter resAdapter = new MoviesTableAdapters.reservationTableAdapter();
    if (Int32.TryParse(info[1], out phoneNo))
    {
    resNo = resAdapter.InsertQuery(phoneNo, info[0]);
    }

При выполнении этого я получаю 1 в качестве возврата, хотя мой LAST_INSERT_ID () - это что-то другое.

Мой запрос похож на

INSERT INTO `reservation` (`phone_no`, `password`) VALUES (@phone_no, @password);
SELECT LAST_INSERT_ID() FROM reservation;

Очевидный вывод здесь состоит в том, что возврат целого числа не работал, но независимо от того, к чему я инициализирую resNo, я все равно получаю 1 - когда я запускаю его на своем веб-сайте, когда я запускаю его непосредственно на MySQLВ базе данных я получаю правильный идентификатор.

Это привело меня к выводу, что я либо использую TableAdapter неправильно / неправильно понял, как он работает.

Заранее спасибо за любыеответы.

1 Ответ

0 голосов
/ 21 апреля 2011

Вот что я думаю, не уверен на 100%.

Почему это не работает на веб-сайте
На вашем веб-сайте каждый новый запрос получает использование нового соединения.

last_insert_id() возвращает только последний_идентификатор текущего соединения.
Так как query1: insert ... использует соединение, отличное от query2: select last_insert_id() query2 всегда будет возвращать 1.

И почему в базе данных все работает нормально
Работая непосредственно с базой данных, база данных достаточно умна, чтобы поддерживать одно и то же соединение открытым, а query1 и query2 выполняются в одном соединении.

Что с этим делать
Вам необходимо выяснить, как заставить ваш код C # использовать постоянные соединения.

...