使用asp.net mvc中的Select语句调用存储过程

时间:2016-05-12 15:14:42

标签: asp.net-mvc stored-procedures

任何人都可以帮助我吗?我有一个存储过程,我想从ASP.NET MVC执行,它将显示数据库中的select语句。存储过程应接受ID,然后返回与该ID关联的一些记录。

这是我必须调用它的代码,但我不知道如何显示它。

SQL代码:

create procedure sp_members_by_skills
    (@memberID int)
as 
begin
    Select memberID, skill_id 
    from members_skills 
    where memberID = @memberID
end

控制器代码:

SapnaDBEntities dbconn = new SapnaDBEntities();

public ActionResult call_members_by_skills(int? id)
{
    var query = dbconn.sp_members_by_skills(id);
    return Json(query,JsonRequestBehavior.AllowGet);
}

查看代码:

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    <div class="form-horizontal">
        <h4>Members by their skills</h4>
        <hr />
        @Html.ValidationSummary(true)

        <div class="form-group">
            @Html.LabelFor(model => model.memberID, new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.memberID)
                @Html.ValidationMessageFor(model => model.memberID)
            </div>
        </div>
    </div>
}

@using (Ajax.BeginForm("call_members_by_skills", "Call_procedures", new AjaxOptions {HttpMethod="POST",InsertionMode=InsertionMode.Replace, UpdateTargetId="resultArea" }))
{
     <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Submit" class="btn btn-default" />
            </div>
        </div>
}

1 个答案:

答案 0 :(得分:1)

您可以在db上下文对象上使用Database.SqlQuery方法来执行存储过程/ sql语句。在调用存储过程之前进行空检查总是一个好习惯,因为你的方法参数是可以为空的。

var result = new List<MemberSkill>();
if(id!=null)
{    
  var memberParam= new SqlParameter("@memberID", id);
  var result = db.Database.SqlQuery<MemberSkill>("EXEC sp_members_by_skills @memberID"
                                                                            , memberParam);
}
return Json(result ,JsonRequestBehavior.AllowGet);

假设MemberSkill是您的结果集的dto类。实体框架将执行存储过程并将结果映射到MemberSkill实例的集合。

正如marc在评论中提到的那样,您不应该使用sp_

作为存储过程的前缀