0

一些存储过程会做一些检查,当检查失败时,返回一个特定的值。如果没有失败,一些返回 SELECT 语句,一些返回 NOTHING(如下面的示例)。

注意:此时不能更改存储过程,下面的示例只是显示 RETURN 和 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?

4

3 回答 3

0

在存储过程中使用 out 参数。

于 2013-10-09T18:15:27.767 回答
0

默认情况下,如果没有给出其他值并且没有抛出错误,SPROC 将返回 0。我不知道这是否适用于您的所有场景(也许您在其中一个场景中明确返回零)但是在这个场景中,当您没有明确返回任何内容时,您仍然会得到 0 响应。

于 2013-10-09T18:26:15.877 回答
0
   var result = dbContext.Database.SqlQuery<string>("QUERY TEXT OR PROUCEDURE TEXT").FirstOrDefualt();

检查结果是否不为空,而不是它必须是 1 或 2。

您还可以按如下方式调用存储过程:

var firstName = "test";
var id = 12;
var sql = @"Update [User] SET FirstName = {0} WHERE Id = {1}";
ctx.Database.ExecuteSqlCommand(sql, firstName, id);

但是 ExecuteSqlCommand 不返回结果!

于 2013-10-09T18:16:59.377 回答