异常:'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.
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.