2016-05-12 97 views
0

任何人都可以幫助我嗎?我有一個存儲過程,我想從ASP.NET MVC執行,它將顯示數據庫中的select語句。存儲過程應接受ID,然後返回與該ID關聯的一些記錄。在asp.net中使用Select語句調用存儲過程mvc

這是我必須稱之爲的代碼,但我不知道如何顯示它。

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> 
} 
+0

您當前正在使用類似實體上或ActiveRecord的一個ORM框架前綴您的存儲過程?或者你是通過ADO.NET查詢數據庫? –

+1

您面臨的問題是什麼? – Shyju

+1

備註:您應該**不要**爲存儲過程使用'sp_'前綴。微軟已經保留了這個前綴以供自己使用(參見*命名存儲過程*)](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx),以及你將來有可能冒着名字衝突的風險。 [這對你的存儲過程性能也是不利的](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)。最好只是簡單地避免使用'sp_'並使用別的東西作爲前綴 - 或者根本沒有前綴! –

回答

1

你可以使用你的數據庫上下文對象的Database.SqlQuery方法來執行存儲過程/ sql語句。在調用存儲過程之前進行空檢查總是一個好習慣,因爲你的方法參數是可空的int。

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實例。

正如馬克在他的評論中提到的,你不應該sp_

相關問題