2015-06-16 23 views
1

我在SQL Server 2008中有一个存储过程。它以电子邮件作为参数,然后查找链接到它的用户是否有权访问移动MVC 5应用程序。存储过程返回1或0.这是存储过程的代码。存储过程在执行时返回-1

-- Add the parameters for the stored procedure here 

    @email varchar(128) 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

DECLARE @Check int 

SELECT 

    @Check = (
        SELECT P.MobileRights 
        FROM eMK_Person as P 
        WHERE P.ID = (SELECT FK_Person FROM eMK_contact WHERE eMK_Contact.Information = @Email) 
        ) 

IF (@Check is null) RETURN 0 
RETURN (@Check) 

END 

GO 

在帐户控制器的标准mvc5码我说对这个存储过程进行简单的检查,如果结果是0,应该只返回视图。下面是我添加到登录任务操作结果的代码:我有两个测试帐户

var test = db.SP_MB_MobileRights(model.Email); 
if (db.SP_MB_MobileRights(model.Email) == 0) 
{ 
    return View(model); 
} 

。一个拥有权利,另一个不拥有权利。如果我使用查询在管理工作室中执行存储过程,它的工作方式应该如此,返回0代表一个,另一个返回1。

但是当我调试代码时,测试变量总是被-1填充。

这是MVC为我编写的代码,当我将存储过程添加到模型中时。

public virtual int SP_MB_MobileRights(string email) 
{ 
    var emailParameter = email != null ? 
     new ObjectParameter("email", email) : 
     new ObjectParameter("email", typeof(string)); 

    return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("SP_MB_MobileRights", emailParameter); 
} 

当我通过它调试,我可以清楚地看到,emailParameter变量充满了电子邮件地址:

Screen shot of debugged code

+0

我编辑了自己的冠军。请参阅:“[应该在其标题中包含”标签“](http://meta.stackexchange.com/questions/19190/)”,其中的共识是“不,他们不应该”。 –

+0

对不起,我想指出在MVC中执行时过程返回-1,不知道如何执行。现在请记住,谢谢! – Robin

+0

但是程序不知道你是否在MVC中运行!我注意到绝大多数问题都以标签开头。请不要那样做,好吗? –

回答

0

如果程序是为了返回1或0尝试改变你的程序进行:

AS 
BEGIN 
IF EXISTS (SELECT P.MobileRights FROM eMK_Person as P WHERE P.ID = (SELECT FK_Person FROM eMK_contact WHERE eMK_Contact.Information = @Email)) 
RETURN 1 
ELSE 
RETURN 0 
END 

你也应该改变你的查询到一个JOIN而不是一个子查询。

喜欢的东西:

SELECT P.MobileRights FROM eMK_Person as P 
    JOIN eMK_contact as C ON c.FK_Person = P.ID WHERE C.Information = @Email 
+0

我没有与SQL很抱歉经历,如果这是一个愚蠢的问题,但加入会有什么好处? – Robin

+0

@Robin这为你解释它。 http://stackoverflow.com/questions/2577174/join-vs-sub-query总之,使用连接通常更快。 – Fred

+0

感谢您的信息! – Robin