如何通过c#mvc函数传递两个参数来调用存储过程

当我需要传递单个参数时,我可以轻松完成,如下所示:

public ProjectsModel GetProjectListBySearch(int projectId) { try { using (_context = new Exo_ADBEntities()) { var getdetailprojectlist = _context.Database.SqlQuery("exec dbo.[GetProjectListByID] @ProjectID", new SqlParameter("@ProjectID", projectId)).FirstOrDefault(); return getdetailprojectlist; } } catch (Exception) { throw; } } 

这很好用但是当我尝试做同样的事情但传递两个参数时我发现语法错误称为无效参数请帮我做这个。使用两个参数时的代码如下

  public List GetProjectDetailsBySectorAndSubSector(int sectorid,int subsectorid) { try { using (_context = new Exo_ADBEntities()) { var projectbysectorandsubsector = _context.Database.SqlQuery("exec dbo.[GetProjectDetailsBySectorAndSubSector] @sectorId,@subSectorId", new SqlParameter("@sectorId, @subSectorId", sectorid, subsectorid)).ToList(); return projectbysectorandsubsector; } } catch (Exception) { throw; } } 

问题是你试图将几个参数作为单个对象传递。

如果你看一下 Database.SqlQuery 的签名 ,你会看到:

 public DbRawSqlQuery SqlQuery( string sql, params Object[] parameters ) 

这太基础了,但是,当你在C#函数中看到params ,它意味着“任意数量的参数”。 这意味着您可以根据需要传递尽可能多的参数。 所以,在你的情况下,它就像这样:

 _context.Database.SqlQuery( "exec dbo.[GetProjectDetailsBySectorAndSubSector] @sectorId,@subSectorId", new SqlParameter("@sectorId", sectorid), new SqlParameter("@subSectorId", subsectorid) ).ToList() 

请注意,当您找到params Object[] ,您也可以传递数组而不是几个参数,即

 _context.Database.SqlQuery( "exec dbo.[GetProjectDetailsBySectorAndSubSector] @sectorId,@subSectorId", new Object[] { new SqlParameter("@sectorId", sectorid), new SqlParameter("@subSectorId", subsectorid)} ).ToList() 

根据代码的外观,这可能更方便。

您可以选择几种方式。

要么将视图模型传递回控制器,这是我个人的偏好。

或者在global.asax中设置一个带有两个参数的新路由。

或者您可以手动执行表单发布,并在视图中使用jQuery传递这两个参数