实体框架没有正确执行返回布尔值的存储过程

时间:2017-05-13 07:33:07

标签: c# sql-server wpf entity-framework stored-procedures

我正在使用Microsoft SQL Server 2014,我的数据库中有一个名为spLogin的存储过程,它返回一个布尔值来指示登录是否成功。

这是存储过程:

USE [MyDataBase]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[spLogin]
@loginName NVARCHAR(50),
@password NVARCHAR(50)
AS
BEGIN
    SET NOCOUNT ON
    DECLARE @bit BIT
    IF NOT EXISTS (SELECT TOP 1 User.UserID FROM User WHERE User.LoginName=@loginName)
        OR RTRIM(LTRIM(@loginName)) IS NULL OR RTRIM(LTRIM(@loginName)) IS NULL
        SET @bit=0
    ELSE
        BEGIN
            DECLARE @userID INT
            SET @userID= (SELECT User.UserID FROM User WHERE User.LoginName=@loginName
                              AND User.Password=HASHBYTES('SHA2_512', @password+CAST(User.Salt AS NVARCHAR(36))))
            IF(@userID IS NULL)
                SET @bit = 0
            ELSE
                SET @bit = 1
        END
    RETURN @bit
END

当我在Microsoft SQL Server 2014 Management Studio上执行此存储过程时,如果我传递了正确的参数,则返回1。例如:

USE [MyDataBase]
GO
DECLARE @return_value int
EXEC    @return_value = [dbo].[spLogin]
        @loginName= N'adminCharles',
        @password= N'admin123'
SELECT  'Return Value' = @return_value
GO

在这种情况下,它返回我期望的值,即1.

但是,当我在WPF项目上使用Entity Framework时,即使我传递了正确的参数,它也会返回-1。例如:

DataBaseEntities context = new DataBaseEntities(); 
var login = context.spLogin("adminCharles","admin123");
//output: -1

在这种情况下,它输出-1而我只是不知道为什么。

我真的很感激这里的一些帮助。提前谢谢。

顺便说一下,这只是一个用于学习实体框架的简单项目。

修改

我为INT更改了@bit BIT,在存储过程结束时,我写了这个:

SET @bit=0
RETURN @bit

我更新了我的项目,我仍然得到-1。这可能是权限问题吗?

0 个答案:

没有答案