Как прочитать содержимое оператора 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
И избавиться от этого спускового крючка. Непроверенные данные не должны попадать через ваш бизнес в базу данных.