2016-05-12 17 views
0

誰かが状況を助けることができますか? ASP.NET MVCから実行したいストアドプロシージャがあり、データベースからSELECTステートメントが表示されます。ストアドプロシージャはIDを受け入れ、それに関連付けられたレコードを返します。IDasp.net mvcでSelectステートメントを使用してストアドプロシージャを呼び出す

ここではコードを呼び出す必要がありますが、表示方法はわかりません。

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を介してdbにクエリを実行していますか? –

+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ステートメント。メソッドの引数がnullable 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クラスです。 Entityフレームワークはストアドプロシージャを実行し、その結果をMemberSkillインスタンスのコレクションにマップします。絞りかすは彼のコメントで述べたように

、あなたはsp_

関連する問題