ASP.NET Framework Web应用登录功能SQL语法错误求助
问题解决
1. 语法错误根源
Table是SQL的保留关键字,直接用作表名会导致SQL语法解析失败,这就是报错Incorrect syntax near the keyword 'Table'的核心原因。
2. 修复步骤
(1)修正SQL表名引用
如果你的表名确实是Table,需要用方括号包裹保留关键字:
INSERT INTO [Table] (username, password) VALUES (@username, @password)
更推荐给表起一个有业务意义的名称(比如Users),彻底避免使用保留关键字,修改后SQL语句:
INSERT INTO Users (username, password) VALUES (@username, @password)
(2)修正登录功能的逻辑错误
注意:当前代码是插入新用户数据,但这与登录功能的逻辑完全不符。登录功能的正确逻辑是查询数据库中是否存在匹配的用户名和密码,示例代码如下:
protected void loginbtn_Click(object sender, EventArgs e) { string conn = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True"; using (SqlConnection connection = new SqlConnection(conn)) { // 登录验证的查询语句 string query = "SELECT COUNT(*) FROM Users WHERE username = @username AND password = @password"; using (SqlCommand cmd = new SqlCommand(query, connection)) { cmd.Parameters.AddWithValue("@username", unametxt.Text); cmd.Parameters.AddWithValue("@password", passwordtxt.Text); connection.Open(); int count = (int)cmd.ExecuteScalar(); if (count > 0) { // 登录成功,跳转到主页或执行其他逻辑 Response.Redirect("Home.aspx"); } else { // 登录失败,提示用户 lblMessage.Text = "用户名或密码错误"; } } } unametxt.Text = ""; passwordtxt.Text = ""; }
(3)额外安全建议
- 禁止明文存储密码,必须使用哈希算法(如BCrypt、SHA256)对密码加密后再存入数据库。
- 避免使用
AddWithValue,推荐用Add方法指定参数类型,防止潜在的类型转换问题:cmd.Parameters.Add("@username", SqlDbType.NVarChar, 50).Value = unametxt.Text; cmd.Parameters.Add("@password", SqlDbType.NVarChar, 100).Value = passwordtxt.Text;
内容的提问来源于stack exchange,提问作者mir
相关产品推荐
相关产品推荐

