【问题标题】:how to pass two parameters to call a stored procedure through c# mvc function如何通过c#mvc函数传递两个参数来调用存储过程
【发布时间】:2014-06-01 03:54:18
【问题描述】:

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

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

        }
        catch (Exception)
        {

            throw;
        }
    }

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

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

        }
        catch (Exception)
        {

            throw;
        }
    }

【问题讨论】:

  • 我的回答解决了你的问题吗?如果是这样,请接受它作为答案,使其对其他人有用。

标签: c# entity-framework stored-procedures


【解决方案1】:

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

如果您是 look at the signatureDatabase.SqlQuery,您会看到:

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

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

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

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

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

这取决于你的代码看起来如何更方便。

【讨论】:

  • 感谢您的回答!我错过了参数之间的逗号
【解决方案2】:

有几个选项可供您选择。

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

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

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

【讨论】:

  • 是的,我正在使用 jquery 将数据从视图传递到控制器,并且该函数也能够检索这两个参数,但我无法获取这些参数
  • “但我无法使用这些参数”,您无法使用这些参数做什么?
  • 啊等一下,您需要为每个传递的变量创建两个 SqlParameter,而不是两个都创建一个 SqlParameter
  • 是的,这是我的问题,如何为两个 SqlParameters 编写,我试过了,但不是我知道的方式:var projectbysectorandsubsector = _context.Database.SqlQuery("exec dbo.[GetProjectDetailsBySectorAndSubSector] @sectorId,@subSectorId", new SqlParameter("@sectorId", sectorid ),new SqlParameter("@subSectorId",subsectorid).ToList();
  • 我也是这样做的,你这样做的时候报错是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-15
  • 2017-12-29
  • 2015-07-21
  • 2016-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多