Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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# EF读取返回值存储过程返回(X)_C#_Entity Framework_Tsql - Fatal编程技术网

C# EF读取返回值存储过程返回(X)

C# EF读取返回值存储过程返回(X),c#,entity-framework,tsql,C#,Entity Framework,Tsql,一些存储过程执行一些检查,当这些检查失败时,返回一个特定的值。如果没有失败,有些返回SELECT语句,有些返回与下面示例类似的内容 注意:此时无法更改存储过程,下面的示例只是显示返回和选择差异的示例 /* THIS IS A SAMPLE PROC */ CREATE PROCEDURE [dbo].[Register] ( @Email varchar(200) ) AS BEGIN SET NOCOUNT ON ; -- Check if user table

一些存储过程执行一些检查,当这些检查失败时,返回一个特定的值。如果没有失败,有些返回SELECT语句,有些返回与下面示例类似的内容

注意:此时无法更改存储过程,下面的示例只是显示返回和选择差异的示例

/* THIS IS A SAMPLE PROC */

CREATE PROCEDURE [dbo].[Register]
(
   @Email varchar(200)
)
AS 
BEGIN

    SET NOCOUNT ON ;

    -- Check if user table has an Active record with this email
    IF EXISTS(SELECT * FROM Users WHERE Email = @Email AND Activated = 0)
    RETURN(1)

    -- Check if user table has an Active record with this email
    IF EXISTS(SELECT * FROM Users WHERE Email = @Email AND Activated = 1)
    RETURN(2)


    -- Create New User record           
    INSERT  INTO Users (Email, xxx)
    VALUES  (@Email, xxxx)

END

使用EF5并将存储过程导入到EDMX中,如果存储过程出现问题,如何获取值1或2?如果存储过程成功执行,如何获取值1或值2?

使用存储过程中的out参数

   var result = dbContext.Database.SqlQuery<string>("QUERY TEXT OR PROUCEDURE TEXT").FirstOrDefualt();

但是ExecuteSqlCommand不会返回结果

默认情况下,如果未给出其他值且未引发错误,存储过程将返回0。我不知道这是否适用于您的所有场景,可能您在其中一个场景中显式返回了零,但在这一场景中,当您没有显式返回任何内容时,您仍然会收到0响应。

-0,1或NULL返回选择@activated=activated FROM user WHERE Email=@Email;如果@activated不为空,则开始返回@activated+1;End存储过程只是一个示例…问题不在于如何计算值,而在于如何从EF5模型中读回值。我理解,这就是我选择注释路线的原因。我只是想指出,您可以减少proc查询相同数据所花费的时间,从而减少锁定和阻塞的机会。我不打算使用EXECUTESQLCOMMAND将存储过程作为字符串传递。我正在使用EF5导入现有的存储过程。那么为什么只使用函数导入和输出参数呢?看看这个,如果设置了回报,那么肯定不是0,所以我们在那里很好。我的问题是,如果在存储的过程中没有发现问题,我如何读取返回值是SELECT field1、field2、field3语句的预期返回?好的,您所描述的与返回语句不同。不能返回结果集。您可以选择一个。返回值必须是int。如果返回结果集,则使用的是函数而不是过程。请参阅本文,了解一种无需重写过程即可获得返回值和结果集的方法。顺便说一句,大写字母不是叫喊,只是习惯于用大写字母写那些关键词。
var firstName = "test";
var id = 12;
var sql = @"Update [User] SET FirstName = {0} WHERE Id = {1}";
ctx.Database.ExecuteSqlCommand(sql, firstName, id);