Проблема с MySql ВВОДИТ МАКСА () +1

Можно создать собственное, авторизовывают атрибут как это:

public class ClubAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
  base.OnAuthorization(filterContext);
  if (filterContext.Cancel && filterContext.Result is HttpUnauthorizedResult)
  {
    filterContext.Result = new RedirectToRouteResult(
      new RouteValueDictionary {
      { "clubShortName", filterContext.RouteData.Values[ "clubShortName" ] },
      { "controller", "Account" },
      { "action", "Login" },
      { "ReturnUrl", filterContext.HttpContext.Request.RawUrl }
    });
  }
}
}

я использовал это для перенаправления в определенный клуб в сайте членства в клубе, который я создаю. Вы могли адаптировать это к своей потребности. BTW, в моем случае, который я действительно перенаправляю к странице входа в систему, но я проверяю, чтобы видеть, авторизовывается ли пользователь и если так, отображают сообщение, что у них нет корректных полномочий. Несомненно Вы могли также добавить что-то к ViewData или TempData для отображения на странице, но я не попробовал это

РЕДАКТИРОВАНИЕ AuthorizationContext. Отмена больше не существует в RC. "filterContext. Результатом является HttpUnauthorizedResult", кажется, достаточно: , Что произошло с filterContext. Отмена (ASP.NET MVC)

12
задан Chad 19 October 2009 в 22:17
поделиться

4 ответа

Вы можете использовать что-то вроде этого:

INSERT INTO users (user_id, name)
SELECT 1 + coalesce((SELECT max(user_id) FROM users WHERE name='Bob'), 0), 'Bob';

Но такой запрос может привести к состоянию гонки. Убедитесь, что вы участвуете в транзакции и заблокируете таблицу пользователей перед ее запуском. В противном случае вы можете получить два боба с одинаковым номером.

17
ответ дан 2 December 2019 в 05:41
поделиться

Вы можете использовать IFNULL :

INSERT INTO users(user_id, name)
SELECT(IFNULL((SELECT MAX(user_id)+1 from users where name='Bob'), 1), 'Bob';
6
ответ дан 2 December 2019 в 05:41
поделиться

Тогда не используйте MAX () + 1. Используйте схему автоматической нумерации в таблице.

Я неправильно прочитал вопрос. Используйте предложение Грега для IFNULL ().

1
ответ дан 2 December 2019 в 05:41
поделиться

Об этом сообщалось как об ошибке в MySQL .

Я цитирую Гильема Бишо:

Во-вторых, вот простейший обходной путь:
вместо использования:
вставить в значения foo (lfd) ((выбрать max (lfd) from foo) +1)
просто сделай
insert into foo (lfd) select (max (lfd) +1) from foo;

3
ответ дан 2 December 2019 в 05:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: