Как прочитать содержимое оператора PRINT триггера из SQL Server и отобразить его в виде?

У меня есть триггер:

CREATE TRIGGER [dbo].[trg_Book_Insert_amount] ON [dbo].[BOOKS]
FOR INSERT
AS
    declare @amount int;
    SELECT @amount = i.amount FROM inserted i;
    IF(@amount >50 OR @amount <0)
    BEGIN
        PRINT 'AMOUNT MUST BE A VALUE BETWEEN 0 AND 50'
        ROLLBACK
    END

Я хочу показать это уведомление ("СУММА ДОЛЖНА БЫТЬ ЗНАЧЕНИЕ МЕЖДУ 0 И 50"), если пользователь моего веб-сайта попытался вставить недопустимое значение @amount, Не могли бы вы предложить решение для меня?

Извините, если метод уже есть, я попытался найти, но ничего не нашел.

1 ответ

Решение

Я думаю, что вы не можете использовать "print" для возврата любого значения. Вы должны использовать "select" вместо:

ВЫБЕРИТЕ "СУММА ДОЛЖНА БЫТЬ ЗНАЧЕНИЕ МЕЖДУ 0 И 50"

Затем, когда запустите запрос вставки, убедитесь, что вы выполняете commend с помощью ExecuteScalar.

Но я не предпочитаю вышеуказанное решение, пока вы используете MVC4, используйте аннотацию данных, как показано ниже:

В файле класса Книги используйте аннотации данных:

   using System.ComponentModel.DataAnnotations;

И измените объявление поля на:

  [Range(0,50,ErrorMessage="Amount must be between 0 and 50")]
   public int Amount { get; set; }

Теперь в представлении добавьте это после поля Amount:

  @Html.ValidationMessageFor(model => model.Amount, "", new { @class = "text-danger" })

И в вашем контроллере вы должны проверить, является ли текущий ModelState действительным.

public ActionResult Post(CreateBook book)
{
    if (ModelState.IsValid) // this will check your model for validations like range, required and so on 
    {

    }
}

Подробнее читайте здесь: https://msdn.microsoft.com/en-us/library/dd901590%28VS.95%29.aspx?f=255&MSPPError=-2147217396

А о проверке с использованием аннотаций данных здесь: http://www.asp.net/mvc/overview/older-versions-1/models-%28data%29/validation-with-the-data-annotation-validators-cs

И избавиться от этого спускового крючка. Непроверенные данные не должны попадать через ваш бизнес в базу данных.

Другие вопросы по тегам