参数化查询 @..SELECT ' 需要参数 '@EmpUsername',但未提供



我尝试编写登录验证ASP。NET API核心3.1和React,但我的代码无法成功登录。

string SqlQuery = @"SELECT * FROM dbo.EmpUser WHERE EmpUsername = @EmpUsername and EmpPassword = @EmpPassword;";
using (SqlCommand sqlCommand = new SqlCommand(SqlQuery, _sqlConnection))
{
sqlCommand.CommandType = System.Data.CommandType.Text;
sqlCommand.CommandTimeout = 180;
sqlCommand.Parameters.AddWithValue("@EmpUsername", request.EmpUsername);
sqlCommand.Parameters.AddWithValue("@EmpPassword", request.EmpPassword);
using (DbDataReader dataReader = await sqlCommand.ExecuteReaderAsync())
{ 
if (dataReader.HasRows)
{
response.Message = dataReader.HasRows.ToString();
}
else
{
response.IsSuccess = false;
response.Message = "Login unsuccessful";
return response;
}
}
}

来自console.log的消息是:

参数化查询"(@EmpUsername nvarchar(4000(,@EmpPassword nvarchar(SELECT"需要参数"@EmpUsername",但未提供该参数。

当我将代码编辑为:时

sqlCommand.Parameters.AddWithValue("@EmpUsername", (request.EmpUsername== null ? "" : request.EmpUsername));
sqlCommand.Parameters.AddWithValue("@EmpPassword", (request.EmpPassword == null ? "" : request.EmpPassword));

来自console.log的消息是

登录失败

如果您之前收到一条错误消息,告诉您没有提供参数,那么这意味着该值为null。现在您已经更改了代码,因此,如果该值为null,则提供一个空字符串。为什么您希望能够使用空字符串作为用户名登录?

如果值是null,那么其他地方显然有问题,所以您需要找到并修复它。可能用户实际上没有提供任何输入,在这种情况下,你甚至不应该尝试登录。可能是在从UI传递用户输入时出现了问题。我们无法从您提供的内容中判断出来,但您向我们展示的代码正在正常工作,即如果用户名为空,那么登录应该会失败。

相关内容

  • 没有找到相关文章

最新更新