使用创建的SQL Server表构建简单的.NET Web应用程序。我继续得到关于SqlDataReader的错误,并且我被困在我出错的地方。
以下是我的错误:其他信息:关键字“表格”附近的语法不正确。
这是我的代码:
编辑:
bool authenticated = AuthenticateMe(txtUsername.Text, txtPassword.Text);
if (authenticated)
{
Response.Redirect("Home.aspx");
}
else
{
Response.Redirect("Default.aspx");
}
}
private bool AuthenticateMe(string username, string password)
{
// string ErrorMessage = "";
string connectionString = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;Connect Timeout=30";
string commandText = "SELECT Username from [Table] where Username = @name AND Password = @pwd";
// try
// {
using (SqlConnection sqlConnection1 = new SqlConnection(connectionString))
using (SqlCommand cmd = new SqlCommand(commandText, sqlConnection1))
{
sqlConnection1.Open();
cmd.Parameters.AddWithValue("@name", username);
cmd.Parameters.AddWithValue("@pwd", password);
int result = (int)cmd.ExecuteNonQuery();
if (result > 0)
{
return true;
}
else
{
return false;
}
}
}
第1版(编辑前):
protected void bnLogin_Click(object sender, EventArgs e)
{
bool authenticated = AuthenticateMe(txtUsername.Text, txtPassword.Text);
if (authenticated)
{
Response.Redirect("Home.aspx");
}
else
{
Response.Redirect("Default.aspx");
}
}
private bool AuthenticateMe(string userName, string password)
{
string connectionString = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;Connect Timeout=30";
SqlConnection sqlConnection1 = new SqlConnection(connectionString);
sqlConnection1.Open();
SqlCommand cmd = new SqlCommand("SELECT Username from Table where Username = userName");
cmd.Connection = sqlConnection1;
SqlDataReader reader = cmd.ExecuteReader();
Response.Write("Entered Sucessfully");
reader = cmd.ExecuteReader();
string localUserName = (string)reader["Username"];
sqlConnection1.Close();
if (userName.Equals(localUserName))
{
return true;
}
else
{
return false;
}
答案 0 :(得分:3)
表是SQL中的保留关键字。尝试在其周围放置方括号:
SqlCommand cmd = new SqlCommand("SELECT Username from [Table] where Username = userName");
答案 1 :(得分:2)
表是关键字。如果您的表名为Table
,则您的SQL必须将其转义。试试[Table]
。
另请注意,您需要为用户名使用参数 - 即where Username = @userName
,您还可以在该命令中添加具有相应值的参数。
答案 2 :(得分:1)
我认为您的SQL查询存在两个问题。
“从表中选择用户名= userName ”
的用户名最后一部分用户名=用户名也是错误的。如果您打算在那里使用常量字符串,则应考虑将用户名放在引号 \'username \'中。不要忘记逃脱符号。如果要将参数传递给SQLCommand,请在查询中使用 @username 并以这种方式传递值
cmd.Parameters [“@ username”]。Value =“Bob”;
答案 3 :(得分:1)
您的AuthenticateMe方法似乎有点错误,无法验证用户身份
所以你可以用这种方式重写代码
private bool AuthenticateMe(string userName, string password)
{
string connectionString = @".....";
string commandText = "SELECT COUNT(*) from [Table] where Username = @name AND Pass = @pwd");
using(SqlConnection sqlConnection1 = new SqlConnection(connectionString))
using(SqlCommand cmd = new SqlCommand(commandText, sqlConnection1))
{
sqlConnection1.Open();
cmd.Parameters.AddWithValue("@name", username);
cmd.Parameters.AddWithValue("@pwd", password);
int result = Convert.ToInt32(cmd.ExecuteScalar());
return (result > 0);
}
}
另外,请记住,将密码以纯文本格式存储在数据库中被认为是一种不好的做法。某些哈希函数应该应用于记忆的密码,以防有人获得数据库的副本时出现任何安全问题。