过程或功能';ValidateUserLogin';期望参数'@用户名';,没有提供

本文关键字:用户 参数 功能 ValidateUserLogin 期望 过程 #39@ | 更新日期: 2023-09-27 18:20:58

我有这个用于验证登录的存储过程

ALTER PROCEDURE ValidateUserLogin
(
@UserName varchar (50),
@Password varchar (50)
)
AS
BEGIN
if EXISTS(SELECT * FROM AdminLogin WHERE UserName=@UserName AND Password=@Password)
select 0/*returns 0 on success*/
ELSE
select 1/*non zero otherwise*/
END

我使用下面的代码调用它,但我得到了以下异常"过程或函数'ValidateUserLogin'需要参数'@UserName',但没有提供。"

   bool boolReturnValue = true;
    SqlCommand command = new SqlCommand();
    command.Connection = sqlConnection;
    command.CommandType = CommandType.StoredProcedure;
    command.CommandText = "ValidateUserLogin";
    command.Parameters.Add(@username,SqlDbType.VarChar,50).Value=username;
    command.Parameters.Add(@password, SqlDbType.VarChar,50).Value=password;
    sqlConnection.Open();
    try
    {
    command.ExecuteScalar();
       boolReturnValue=Convert.ToBoolean( command.ExecuteScalar());
    }
    catch (Exception ex)
    {
        Response.Write(ex.Message);
    }

当我尝试将用户名和密码的默认值设置为null时,我会得到异常@admin不是ValidateUserLogin过程的参数//admin是为用户名提供的值

过程或功能';ValidateUserLogin';期望参数'@用户名';,没有提供

更改以下两行:

command.Parameters.Add(@username,SqlDbType.VarChar,50).Value=username;
command.Parameters.Add(@password, SqlDbType.VarChar,50).Value=password;

带有:

command.Parameters.Add("@Username",SqlDbType.VarChar,50).Value=username;
command.Parameters.Add("@Password", SqlDbType.VarChar,50).Value=password;

对于Add方法,您需要将参数名称放在引号中。换句话说,"@username"加上引号。

如果数据库区分大小写,则参数具有区分大小写的

 command.Parameters.Add(@username,SqlDbType.VarChar,50).Value=username;

应具有@UserName参数以匹配过程的大小写。

当然,密码也是如此。