【发布时间】:2015-10-20 22:55:56
【问题描述】:
CREATE PROC spIsValidUser
@UserName varchar(50),
@Password varchar(50)
AS
IF Exists(SELECT * FROM Users where UserName=@UserName and Password=@Password)
BEGIN
return 0
END
ELSE
BEGIN
return 1
END
GO
我已经创建了这个Stored Procedure 并尝试使用实体框架调用这个Stored Procedure。以下是用 C# 编写的代码。
MyBusEntities db = new MyBusEntities();
int empQuery = db.spIsValidUser("abc", "abc@123");
spIsValidUser Stored Procedure 在所有情况下都返回-1。请让我知道错误。
编辑 - 根据给定的答案,不使用存储过程返回语句,因为实体框架不支持存储过程返回标量值开箱即用..让我知道如何发送标量数据Stored Procedure?
【问题讨论】:
-
您是否尝试过单步执行您的代码、枚举过程或直接在 SQL Server 上手动执行过程?我怀疑它的存在,但除非我们快速调试,否则无法确定。
-
是正确定义和实例化的 db。 (当您枚举时)是否列出了 spIsValidUser 过程。当您在 SQL 服务器上手动调用此过程时,它会返回什么。
-
是的。我在 SQL Server 中使用以下语句手动执行了 spIsValidUser。 EXEC spIsValidUser 'abc' 'abc@123' 它给了我输出 0。我还检查了 Db。它被正确定义和实例化。
-
为什么要在用户有效时返回 0,而在用户无效时返回 1。这里有点奇怪的身份验证逻辑。您是否考虑过行业标准做法?您可以使用在线提供的标准身份验证代码项目之一,并根据您的需要对其进行自定义。
-
我们稍后会在这个项目中集成认证逻辑。这个问题在调用任何返回整数的存储过程时都会面临。
标签: c# sql sql-server entity-framework stored-procedures