2017-10-25 22 views
1

ASP.NET MVC 5のストアドプロシージャEntity Frameworkを使用してデータベースにデータを挿入したいのですが、SQL Server、しかし、プロシージャを実行するときにVisual Studioで挿入しているときに、そのエラーが発生します。ASP.NET MVC 5のストアドプロシージャの挿入でスカラー変数 "@employeeid"を宣言する必要があります

私のコントローラのコードは次のとおりです。

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult SaveEntitlement(Entitlement entment) 
{ 
    if (!ModelState.IsValid) 
    { 
     var viewmodel = new EntitlementViewModel(entment); 
     return View("EntitlementIndex", viewmodel); 
    } 

    if (entment.EntitlementId == 0) 
    { 
     var courseList = _dbContext.Entitlement.SqlQuery ("exec APPLIEDDAYS @employeeid,@LeaveTypeId,@LeavePeriodId,@startdate,@enddate", entment.EmployeeId,entment.LeaveTypeId,entment.LeavePeriodId,entment.FromDate.ToShortDateString(),entment.UptoDate.ToShortDateString()).ToList<Entitlement>(); 
     ////_dbContext.Entitlement.Add(entment); 
     _dbContext.SaveChanges(); 

     TempData["msg"] = "Record Saved Successfully!"; 
    } 

    return RedirectToAction("EntitlementIndex", "LeaveSetup"); 
} 

エラーは次のとおりです。

enter image description here

+0

(OT) '@ startdate'と' @enddate'が日付であることを願っています。次に、文字列ではなくDateTime値を指定します。 –

+0

野生の推測:[MSDNの例](https://msdn.microsoft.com/en-us/library/jj592907.aspx)にはパラメータとして '@ p0'があります。 '@ p0'、' @p1'などをparamの名前として試してみてください。 –

+0

https://stackoverflow.com/questions/4873607/how-to-use-dbcontext-database-sqlquerytelementsql-params-with-stored-procedもご覧ください。 –

答えて

0

私は、あなたが(この場合は社員)を使用しているパラメータのいずれかがnullの場合にそれが起こる信じません文字列の場合のように "null"。プロシージャを呼び出す前に、パラメータに適切な値を割り当てることができます。 はそうと仮定しentment.EmployeeIdは、int型のタイプです?:

if (entment.EntitlementId == 0) 
    { 
     var param1 = !entment.EmployeeId.HasValue ? "null" : entment.EmployeeId.ToString(); 

     var courseList = _dbContext.Entitlement.SqlQuery ("exec APPLIEDDAYS @employeeid,@LeaveTypeId,@LeavePeriodId,@startdate,@enddate", 
param1,entment.LeaveTypeId,entment.LeavePeriodId,entment.FromDate.ToShortDateString(),entment.UptoDate.ToShortDateString()).ToList<Entitlement>(); 
     ////_dbContext.Entitlement.Add(entment); 
     _dbContext.SaveChanges(); 

     TempData["msg"] = "Record Saved Successfully!"; 
    } 

PS:これはそれを行うための正しい方法があるが、それが動作するかどうかわかりません。

+0

これにより、sprocは '' null''ではなく '' null ''を文字列として扱います。 – Amy

+0

私の悪い私は_dbContext.Database.Connection.CreateCommand()を使用する場合と同じだと思ったが、これは有効な答えではない。 –

+0

あなたは正しい考えを持っています。 'DbNull.Value'という値を持つ' SqlParameter'を使うだけです。https://stackoverflow.com/questions/4555935/assign-null-to-a-sqlparameterを参照してください。 – Amy

関連する問題