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。我编辑了我的答案以反映它。