c# - 如何从SQL Server读取触发器的PRINT语句的内容,并将其显示在 View 中?

标签 c# asp.net-mvc

我有一个触发器:

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/

相关文章:

asp.net-mvc - ASP.NET MVC 4 + EF5 beta2 + DbGeography 类型 + MiniProfiler 抛出错误

asp.net-mvc - 基于ASP.NET MVC的FCKeditor如何设置配置或服务器上传图片?

c# - 如何使用MVVM从Restful Service向Xamarin.Forms View 显示图像

c# - Imageresizer.AzureReader2 不适用于最新的 Azure SDK 2.1.0.3

c# - 字典计数大于 89478457 时出错

asp.net-mvc - MVC 中的下拉列表 onchange 事件和 AJAX

asp.net-mvc - 网格中的 kendo ui 客户端模板无法在 asp.net mvc 4 中工作

c# - 在 C# 中以编程方式从数据库创建 XSD

c# - 将数据库中的数据绑定(bind)到 .NET 中的下拉列表

asp.net-mvc - DTO = View 模型?