异常:'Procedure or function usp_UserValidation has too many arguments specified.'

SqlException: 'Procedure or function usp_UserValidation has too many arguments specified.'

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 行出现错误。

我在这里错过了什么?

(var userid, var roletype) = sqlConn.QuerySingle<(int, string)>("usp_UserValidation", 
    new { users.UserName, users.Password }, commandType: CommandType.StoredProcedure);

这里的关键变化是结果在 select 中,而不是通过参数;其他更改只是简化了代码。

您应该将@UserID 定义为输出。

CREATE PROCEDURE usp_UserValidation
    (@UserName varchar(50),
     @Password varchar(30),
     @UserID int OUTPUT)

AS
BEGIN

然后select进入变量为returnUserID

SELECT @UserID = xxx.