【发布时间】:2020-03-09 15:39:19
【问题描述】:
CREATE PROCEDURE usp_UserValidation
(@UserName varchar(50),
@Password varchar(30))
AS
BEGIN
DECLARE @UserID int, @RoleID int;
SELECT @UserID = UserId, @RoleID = RoleId
FROM Users
WHERE UserName = @UserName AND Password = @Password
IF @UserID IS NOT NULL
BEGIN
IF EXISTS (SELECT UserId FROM Users WHERE UserId = @UserID AND IsActive = 1)
BEGIN
SELECT
@UserID [UserID],
(SELECT RoleType FROM Role WHERE RoleId = @RoleID) [RoleType] -- User Valid
END
ELSE
BEGIN
SELECT -2 [@UserID], '' [RoleType] -- User not activated.
END
END
ELSE
BEGIN
SELECT -1[@UserID] , '' [RoleType] -- User invalid.
END
END
小巧玲珑
public (int UserId,string Roletype) UserAuthentication(UsersViewModel users)
{
DynamicParameters parameters = new DynamicParameters();
parameters.Add("@UserName", users.UserName);
parameters.Add("@Password", users.Password);
parameters.Add("@UserID", dbType: DbType.Int32, direction: ParameterDirection.Output);
connection();
sqlConn.Open();
var res = SqlMapper.Query(sqlConn, "usp_UserValidation", parameters, commandType: CommandType.StoredProcedure).SingleOrDefault();
int userid = parameters.Get<dynamic>("@UserID");
string roletype = parameters.Get<dynamic>("@RoleType");
sqlConn.Close();
return (userid, roletype);
}
我正在尝试对给定的用户凭据实施身份验证。存储过程在 SQL 中运行良好。运行应用程序时,SqlMapper.Query 行出现错误。
我在这里错过了什么?
【问题讨论】:
-
@UserName和@Password是存储过程的参数。UserID和RoleType是返回结果集中的列。 -
您的存储过程 DOES NOT 有
@UserID OUTPUT参数 - 您在C# 代码... @UserId 和 @RoleId 值作为 结果数据集 - NOT 作为参数返回! -
顺便说一句;您应该不将密码存储为
varchar(30)- 它应该是原始密码的加盐哈希 -
@MarcGravell Point 指出。
-
@marc_s 添加到同一问题中,查询返回 UserId 和 RoleType 的值,但 roletype 变量显示为 null。为什么?
标签: sql-server dapper