存储过程returns执行时-1
Stored procedure returns -1 when executed
我在 SQL 服务器 2008 中有一个存储过程。它以电子邮件作为参数,然后查找链接到它的用户是否有权访问移动 MVC 5 应用程序。存储过程 return 是 1 或 0。这是存储过程的代码。
-- 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,它应该只是 return 视图。这是我添加到登录任务操作结果中的代码:
var test = db.SP_MB_MobileRights(model.Email);
if (db.SP_MB_MobileRights(model.Email) == 0)
{
return View(model);
}
我有两个测试账户。一种有权利,一种没有。如果我使用查询在管理工作室中执行存储过程,它会像它应该的那样工作,return 一个为 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变量里面填的是email地址:
如果该程序旨在 return 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
我在 SQL 服务器 2008 中有一个存储过程。它以电子邮件作为参数,然后查找链接到它的用户是否有权访问移动 MVC 5 应用程序。存储过程 return 是 1 或 0。这是存储过程的代码。
-- 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,它应该只是 return 视图。这是我添加到登录任务操作结果中的代码:
var test = db.SP_MB_MobileRights(model.Email);
if (db.SP_MB_MobileRights(model.Email) == 0)
{
return View(model);
}
我有两个测试账户。一种有权利,一种没有。如果我使用查询在管理工作室中执行存储过程,它会像它应该的那样工作,return 一个为 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变量里面填的是email地址:
如果该程序旨在 return 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