SQL Server 2022查询User表提示表名附近语法错误如何解决
错误成因
User是SQL Server 2022的内置保留关键字,对应该系统内置的USER()函数,作用是返回当前上下文的登录用户名。你在查询语句中直接写FROM User时,SQL语法解析器不会将其识别为自定义表名,会触发语法解析失败,最终抛出表名附近存在语法错误的提示。
另外你的代码中存在一处冗余逻辑:ExecuteNonQuery()仅用于执行INSERT/UPDATE/DELETE这类无结果集返回的操作,你执行的是SELECT查询,提前调用这个方法会额外触发一次无效的查询执行,没有实际作用。
修复方案
- 语法修正:给作为表名使用的保留关键字添加SQL Server专属的界定符方括号
[],将语句中的User修改为[User],修改后的查询语句为:SELECT * FROM [User] WHERE Username=@user AND Password=@pass - 长期规范优化(可选但推荐):如果项目还在迭代初期,建议避免使用保留关键字命名数据库对象,比如将用户表重命名为
Users、Sys_User这类非保留字名称,后续编写SQL时不需要额外添加界定符,也能避免同类语法错误。 - 冗余代码清理:删除语句中多余的
cmd.ExecuteNonQuery()调用,SELECT查询直接通过SqlDataAdapter.Fill()填充结果集即可。 - 安全提示:不建议明文存储用户密码,生产环境建议对密码做加盐哈希处理后再存储,避免数据泄露引发安全问题。
修正后的完整VB代码如下:
Using con As New SqlClient.SqlConnection("Server=xxx.xxx.x.x,1433;Database=XX;User ID=xxxxx;Password=xxxxxxxxx") con.Open() Dim cmd As New SqlCommand("SELECT * FROM [User] WHERE Username=@user AND Password=@pass", con) cmd.Parameters.AddWithValue("@user", TextBox1.Text) cmd.Parameters.AddWithValue("@pass", TextBox2.Text) Dim adap As New SqlDataAdapter(cmd) Dim tab As New DataTable adap.Fill(tab) End Using
内容的提问来源于stack exchange,提问作者Christy_mall95
相关产品推荐
相关产品推荐

