C#登录窗口SQL报错:关键字'Table'附近有语法错误
问题分析与解决方案
嘿,我一眼就揪出你遇到的问题根源啦!
1. 直接报错原因:误用SQL保留关键字当表名
Table是SQL Server的保留关键字,你直接在查询语句里写from Table会让数据库解析器彻底懵圈,这就是报错“incorrect syntax near the keyword 'Table'”的核心原因。解决起来很简单,把表名用方括号[]包裹起来就行:
Select * from [Table] Where username = ...
2. 紧急修复:杜绝SQL注入漏洞
你现在用字符串拼接账号密码的方式构造SQL语句,这是非常危险的操作——黑客很容易通过输入特殊字符发起SQL注入攻击,窃取甚至破坏你的数据库。必须改用参数化查询,我帮你把代码改好了:
private void button1_Click(object sender, EventArgs e) { // 用using语句自动释放连接资源,避免内存泄漏和连接池耗尽 using (SqlConnection sqlcon = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=E:\eAlati - 1366x768\FastFoodDemo\DB\logindb.mdf;Integrated Security=True;Connect Timeout=30")) { // 参数化查询模板,避免SQL注入 string query = "Select * from [Table] Where username = @Username and password = @Password"; SqlDataAdapter sda = new SqlDataAdapter(query, sqlcon); // 添加参数,自动处理特殊字符,安全又省心 sda.SelectCommand.Parameters.AddWithValue("@Username", txtUsername.Text.Trim()); sda.SelectCommand.Parameters.AddWithValue("@Password", txtPassword.Text.Trim()); DataTable dtbl = new DataTable(); sda.Fill(dtbl); if (dtbl.Rows.Count == 1) { ucitavanje objUcitavanje = new ucitavanje(); this.Hide(); objUcitavanje.Show(); } else { MessageBox.Show("Vaše korisničko ime ili lozinka nisu točni! Pokušajte ponovno"); } } }
3. 额外优化建议
- 尽量别用SQL保留关键字当表名、列名,比如把表名改成
Users,既规范又能避免这类语法问题; - 永远记得用
using包裹数据库连接、命令等资源,它会自动帮你关闭并释放资源,省去手动管理的麻烦。
内容的提问来源于stack exchange,提问作者Zuriosmm
相关产品推荐
相关产品推荐

