Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ访问存储过程值。实体框架5,数据库优先_C#_Sql Server_Linq_Entity Framework_Stored Procedures - Fatal编程技术网

C# 使用LINQ访问存储过程值。实体框架5,数据库优先

C# 使用LINQ访问存储过程值。实体框架5,数据库优先,c#,sql-server,linq,entity-framework,stored-procedures,C#,Sql Server,Linq,Entity Framework,Stored Procedures,我的存储过程工作正常。但是,我无法检索它 我当前从存储过程中检索值的函数是: public static int GetCsStatus() { using (Entities db = new Entities()) { System.Data.Objects.ObjectParameter s = new System.Data.Objects.ObjectParameter("Status", typeof(int))

我的存储过程工作正常。但是,我无法检索它

我当前从存储过程中检索值的函数是:

    public static int GetCsStatus()
    {
        using (Entities db = new Entities())
        {
            System.Data.Objects.ObjectParameter s = new System.Data.Objects.ObjectParameter("Status", typeof(int));
            int r = db.proc_CsStatus(120, s);//.ToString());
            return r;
        }
    }
我不介意这是改变还是根本不用。当我期望值为0或1时,我当前得到的r值为-1

以下是我的存储过程:

    USE [DATABASE_CS]
    GO

    SET ANSI_NULLS ON
    GO

    SET QUOTED_IDENTIFIER ON
    GO

    ALTER PROCEDURE [dbo].[proc_CsStatus]
        -- Add the parameters for the stored procedure here
        @TimeLimit Int,
        @Status Int OUTPUT
    AS
    BEGIN
        -- SET NOCOUNT ON added to prevent extra result sets from
        -- interfering with SELECT statements.
        SET NOCOUNT ON

        -- Declare variables.
        DECLARE @LastUpdate Int

        -- Calculate the LastUpdate.
        SELECT @LastUpdate = DATEDIFF(second, Timestamp, CURRENT_TIMESTAMP)
        FROM Heartbeat
        WHERE Id=1

        -- Compare it to the TimeLimit.
        IF @LastUpdate > @TimeLimit SELECT @Status = 0
        ELSE SELECT @Status = 1
    END
    GO

非常感谢您的任何意见

执行过程后,Objects参数将包含该值。您的过程调用将不会返回它。您要查找的值应该可以在s.value中找到

请尝试以下操作:

public static int GetCsStatus()
{
    using (Entities db = new Entities())
    {
        System.Data.Objects.ObjectParameter s = new System.Data.Objects.ObjectParameter("Status", typeof(int));
        int r = db.proc_CsStatus(120, s);
        return (int)s.Value;
    }
}
return base.ExecuteFunction("proc_CsStatus", input, output);
返回的值r是受过程影响的行数

更多信息:

在幕后,您的过程是按照以下思路进行的:

public static int GetCsStatus()
{
    using (Entities db = new Entities())
    {
        System.Data.Objects.ObjectParameter s = new System.Data.Objects.ObjectParameter("Status", typeof(int));
        int r = db.proc_CsStatus(120, s);
        return (int)s.Value;
    }
}
return base.ExecuteFunction("proc_CsStatus", input, output);

ObjectContext.ExecuteFunction返回受调用影响的行数。

执行过程后,Objects参数将包含该值。您的过程调用将不会返回它。您要查找的值应该可以在s.value中找到

请尝试以下操作:

public static int GetCsStatus()
{
    using (Entities db = new Entities())
    {
        System.Data.Objects.ObjectParameter s = new System.Data.Objects.ObjectParameter("Status", typeof(int));
        int r = db.proc_CsStatus(120, s);
        return (int)s.Value;
    }
}
return base.ExecuteFunction("proc_CsStatus", input, output);
返回的值r是受过程影响的行数

更多信息:

在幕后,您的过程是按照以下思路进行的:

public static int GetCsStatus()
{
    using (Entities db = new Entities())
    {
        System.Data.Objects.ObjectParameter s = new System.Data.Objects.ObjectParameter("Status", typeof(int));
        int r = db.proc_CsStatus(120, s);
        return (int)s.Value;
    }
}
return base.ExecuteFunction("proc_CsStatus", input, output);

ObjectContext.ExecuteFunction返回受调用影响的行数。

我得到一个红色的swiggly,表示错误2“int”不包含“Value”的定义,并且找不到接受第一个“int”类型参数的扩展方法“Value”?是否缺少using指令或程序集引用?您可能只需返回s、 你的两种说法相互影响。您在第一个错误中说s是上面的int,然后在后面的错误中说它是ObjectParameter。如果它是一个ObjectParameter,您应该能够使用s.Value,因为ObjectParameter的属性为Value。我假设你第一次尝试返回r.Value,我只是复制了你的环境。我唯一要做的改变,是因为我需要将s.Value转换为int。我编辑了我的答案以反映它。我得到一个红色的swiggly,表示错误2“int”不包含“Value”的定义,并且找不到接受类型为“int”的第一个参数的扩展方法“Value”?是否缺少using指令或程序集引用?您可能只需返回s、 你的两种说法相互影响。您在第一个错误中说s是上面的int,然后在后面的错误中说它是ObjectParameter。如果它是一个ObjectParameter,您应该能够使用s.Value,因为ObjectParameter的属性为Value。我假设你第一次尝试返回r.Value,我只是复制了你的环境。我唯一需要做的改变是,我需要将s.Value转换为int。我编辑了我的答案以反映它。