You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:25:42