我是一名ASP.NET C#的初学者,我的数据库是SQL Server。我正在尝试编写一个查询,想要使用预处理语句。
以下是允许用户登录的查询:
SqlParameter UserName = new SqlParameter("@user", SqlDbType.NVarChar, 30);
SqlParameter Password = new SqlParameter("@pass", SqlDbType.NVarChar, 20);
UserName.Value = user.ToLower();
Password.Value = pass;
SqlCommand command = new SqlCommand(null, conn);
command.Parameters.Add(UserName);
command.Parameters.Add(Password);
command.CommandText = "SELECT * FROM table_users WHERE user_name = '@user' AND password = '@pass';";
command.Prepare();
SqlDataReader reader = command.ExecuteReader();
bool tmp = reader.HasRows;
tmp
变量的值始终为 FALSE
,即使我输入了正确密码的现有用户。
如果我只是删除参数并以这种方式编写查询:
command.CommandText = "SELECT * FROM table_users WHERE user_name = '"+user+"' AND password = '"+ pass+"';";
tmp
变量获取了存在用户的TRUE
值。
我尝试在INSERT INTO
查询中使用此语法,它可以正确运行。
我已经阅读了所有有关将@
更改为?
的建议,但它并没有奏效。 我遇到了以下错误:
语法不正确。 语句无法准备好。
请帮帮我,谢谢!