没有重载需要0个参数用于存储过程

时间:2014-01-21 08:01:42

标签: asp.net sql sql-server asp.net-mvc

背景 我的存储过程'GetAtdRecord_Sp'可选择接受参数'EmplID',否则默认值为null。它适用于SQl服务器管理工​​作室,即使我没有像我想要的那样提供任何价值。

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

问题: 但是当我从Asp.net MVC应用程序通过Linq执行它到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

1 个答案:

答案 0 :(得分:0)

尝试刷新 .edmx 文件。更改后,代码库中的存储过程未被更改。