2014-01-21 40 views
0

背景: 我的存儲過程'GetAtdRecord_Sp'可選地接受參數'EmplID',否則默認值爲空。它在SQl服務器管理工​​作室工作,即使我沒有提供任何價值,因爲我想做的事情。無過載需要0參數存儲過程

exec GetAtdRecord_Sp  // This works 
exec GetAtdRecord_Sp 23 // This works too with value. 

問題:但是當我通過LINQ的從Asp.net MVC應用程序中執行它的SQL代碼,然後它需要一個參數,並拋出錯誤:

Error 1 No overload for method 'GetAtdRecord_Sp' takes 0 arguments 

,如果我通過工作值如下所示。

代碼:使用EmployeeAttendance_app.Models ;

namespace EmployeeAttendance_app.Controllers 
{ 
    public class HomeController : Controller 
    { 
     public ActionResult Index() 
     { 
      ViewBag.Message = "Precise Technology Consultants"; 
      var DataContext = new EmployeeAtdDataContext(); 
      //var EmployeeAtd = DataContext.GetAttendance_Sp(); 
      IEnumerable<GetAtdRecord_SpResult> EmployeeAtd = DataContext.GetAtdRecord_Sp(22).ToList(); 
      return View(EmployeeAtd); 
     } 

但它不起作用,當我離開GetAtdRecord_Sp()這樣的空。

存儲過程:

ALTER PROCEDURE [dbo].[GetAtdRecord_Sp] 
    @EmplID INT = NULL 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    IF (@EmplID IS NULL) --IF block starts 
    BEGIN 
     WITH times 
     AS (
      SELECT t1.EmplID 
       ,t3.EmplName 
       ,min(t1.RecTime) AS InTime 
       ,max(t2.RecTime) AS [TimeOut] 
       ,t1.RecDate AS [DateVisited] 
      FROM AtdRecord t1 
      INNER JOIN AtdRecord t2 ON t1.EmplID = t2.EmplID 
       AND t1.RecDate = t2.RecDate 
       AND t1.RecTime < t2.RecTime 
      INNER JOIN HrEmployee t3 ON t3.EmplID = t1.EmplID 
      GROUP BY t1.EmplID 
       ,t3.EmplName 
       ,t1.RecDate 
      ) 
     SELECT EmplID 
      ,EmplName 
      ,InTime 
      ,[TimeOut] 
      ,[DateVisited] 
      ,CASE 
       WHEN minpart = 0 
        THEN CAST(hourpart AS NVARCHAR(200)) + ':00' 
       ELSE CAST((hourpart - 1) AS NVARCHAR(200)) + ':' + CAST(minpart AS NVARCHAR(200)) 
       END AS 'total time' 
     FROM (
      SELECT EmplID 
       ,EmplName 
       ,InTime 
       ,[TimeOut] 
       ,[DateVisited] 
       ,DATEDIFF(Hour, InTime, [TimeOut]) AS hourpart 
       ,DATEDIFF(minute, InTime, [TimeOut]) % 60 AS minpart 
      FROM times 
      ) source 
    END --IF block ends 
    ELSE 
    BEGIN --Else block stats 
     WITH times 
     AS (
      SELECT t1.EmplID 
       ,t3.EmplName 
       ,min(t1.RecTime) AS InTime 
       ,max(t2.RecTime) AS [TimeOut] 
       ,t1.RecDate AS [DateVisited] 
      FROM AtdRecord t1 
      INNER JOIN AtdRecord t2 ON t1.EmplID = t2.EmplID 
       AND t1.RecDate = t2.RecDate 
       AND t1.RecTime < t2.RecTime 
      INNER JOIN HrEmployee t3 ON t3.EmplID = t1.EmplID 
      GROUP BY t1.EmplID 
       ,t3.EmplName 
       ,t1.RecDate 
      ) 
     SELECT EmplID 
      ,EmplName 
      ,InTime 
      ,[TimeOut] 
      ,[DateVisited] 
      ,CASE 
       WHEN minpart = 0 
        THEN CAST(hourpart AS NVARCHAR(200)) + ':00' 
       ELSE CAST((hourpart - 1) AS NVARCHAR(200)) + ':' + CAST(minpart AS NVARCHAR(200)) 
       END AS 'total time' 
     FROM (
      SELECT EmplID 
       ,EmplName 
       ,InTime 
       ,[TimeOut] 
       ,[DateVisited] 
       ,DATEDIFF(Hour, InTime, [TimeOut]) AS hourpart 
       ,DATEDIFF(minute, InTime, [TimeOut]) % 60 AS minpart 
      FROM times 
      ) source 
     WHERE EmplID = @EmplID 
    END --Else block ends here 
END 

回答

0

嘗試刷新您的.edmx 文件。存儲過程在更改後未在代碼庫中進行更改。

+0

仍然是同樣的問題 –