我正在使用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。这可能是权限问题吗?