asp.net-mvc-3 - 如何将异常从存储过程传递到我的 Post Action 方法

标签 asp.net-mvc-3 sql-server-2008 stored-procedures

我有以下将两个参数传递给存储库方法的 Post Action 方法:-

 [HttpPost]
        public void Delete(string id, int classid )
        {
            repository.Deleteuserclass(id, classid);        }

存储库方法在哪里:-

public void Deleteuserclass(string a, int u)

    {
        entities.deleteuserclass(a,u);}

最后,存储库方法将调用以下存储过程:-

ALTER PROCEDURE dbo.deleteuserclass
@userid nvarchar(50),
@classid int
AS
Begin

Delete from Users_Classes where UserID = @userid  AND ClassID = @classid
END

如果存储过程没有删除任何记录,我如何将异常传递给将在数据库端引发的操作方法?

编辑:- 我更新存储过程如下:-

ALTER PROCEDURE dbo.deleteuserclass
@userid nvarchar(50),
@classid int
AS
Begin

Delete from Users_Classes where UserID = @userid  AND ClassID = @classid
if @@rowcount = 0     
    Raiserror('No record deleted',1,16) 
END

我更新了操作方法:-

        public ActionResult Delete(string id, int classid ) {
try{
                       Thread.Sleep(1000);
                       Users_Classes u_c = r.FindUserClass(id, classid);
                       r.Deleteuserclass(id, classid);
                       return Json(new { IsSuccess = "True", id = u_c.UserID + u_c.AddedDate.ToString("ddMMyyyyHHmmss"), name = u_c.UserID }, JsonRequestBehavior.AllowGet);
                   }
                   catch (ArgumentNullException)
                   {
                       return Json(new { IsSuccess = "F1" }, JsonRequestBehavior.AllowGet);}
                   catch (DbUpdateConcurrencyException)
                   {return Json(new { IsSuccess = "F2" }, JsonRequestBehavior.AllowGet); }
                   catch (NullReferenceException)
                   {return Json(new { IsSuccess = "F4" }, JsonRequestBehavior.AllowGet); }
                   catch (Exception e)
                   {return Json(new { IsSuccess = "F5" }, JsonRequestBehavior.AllowGet);}

但问题是,如果存储过程没有删除任何记录,那么应用程序将在 return Json(new { IsSuccess = "True", id = u_c.UserID + u_c.AddedDate.ToString("ddMMyyyyHHmmss"), name = u_c.UserID }, JsonRequestBehavior.AllowGet); ,它不会引发应该已经在存储过程级别引发的异常'No record deleted', 在到达 return 语句之前.. 那么可能是什么问题?

最佳答案

您要做的是传递不规则的存储过程的返回值。你会像这样修改你的存储过程:

ALTER PROCEDURE dbo.deleteuserclass
@userid nvarchar(50),
@classid int
AS
Begin

Delete from Users_Classes 
where UserID = @userid  
AND ClassID = @classid

if @@rowcount = 0
    return -1

END

我不确定您是如何调用存储过程的(对 EF 不太熟悉),但您应该能够捕获返回值:

// notice this method now returns bool instead of void
public bool Deleteuserclass(string a, int u)
{
    return entities.deleteuserclass(a,u) > 0;
}

然后在您的 POST 操作方法中,只需测试 DeleteUserClass() 方法的 bool 结果:

[HttpPost]
public void Delete(string id, int classid )
{
    if (!repository.Deleteuserclass(id, classid))
        // no user deleted, handle accordingly        
}

关于asp.net-mvc-3 - 如何将异常从存储过程传递到我的 Post Action 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9712819/

相关文章:

c# - 将 PagedList 与 View 模型 MVC 3 一起使用

MySQL Cursor Loop 不更新

sql-server - SQL UNION FOR XML 名称输出列

sql - 使用通用的相关子查询有效地提取不同的列

c# - 什么时候使用存储过程而不是使用任何具有编程逻辑的 ORM?

java - 如何使用存储过程获取Select后的主键值?

c# - 在 MVC3 中,是否可以在不同区域使用相同的 Controller 名称?

asp.net-mvc - 在 IE 中拖放上传

asp.net-mvc-3 - Mini Profiler 不渲染脚本

excel - 将 Excel 工作表保存到 SQL 中