我有一个触发器:
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
如果我的网站用户尝试插入无效的 @amount
值,我想显示该通知(“AMOUNT MUST BE A BETWEEN 0 AND 50”)。您能为我建议一个解决方案吗?
很抱歉,如果已经有方法了,我尝试过搜索,但没有找到任何东西。
最佳答案
我认为你不能使用“print”返回任何值,你必须使用“select”:
选择“金额必须是 0 到 50 之间的值”
然后,当运行插入查询时,请确保使用 ExecuteScalar 执行command。
但是我不喜欢上面的解决方案,当您使用MVC4时,请使用如下数据注释:
在Book的类文件中,利用数据注释:
using System.ComponentModel.DataAnnotations;
并将字段声明更改为:
[Range(0,50,ErrorMessage="Amount must be between 0 and 50")]
public int Amount { get; set; }
现在在 View 上将其添加到“金额”字段后:
@Html.ValidationMessageFor(model => model.Amount, "", new { @class = "text-danger" })
并且在您的 Controller 中,您必须检查当前的 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
并摆脱那个触发器。未经验证的数据不得通过您的业务到达数据库。
关于c# - 如何从SQL Server读取触发器的PRINT语句的内容,并将其显示在 View 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30438801/