VB.NET连接SQL Server:客户登录模块失效问题求助
问题排查与修复方案
核心问题分析
你的客户登录模块失效主要有两个明确原因,还有一个潜在风险需要修正:
表名不匹配
你明确说明数据库中客户表是tbCustomer,但客户登录代码里查询的是tbLogin表,这直接导致查询目标错误,自然无法匹配到客户记录。SQL语句的空格冗余
客户登录SQL中,username条件写成了' " + txtUsername.Text + " ',这会在输入的用户名前后自动添加空格。比如你输入customer001,实际执行的SQL会查询username=' customer001 ',和数据库中无空格的username记录完全不匹配,导致返回空结果。SQL注入风险(必须修复)
当前用字符串拼接生成SQL的方式存在严重的SQL注入漏洞,同时也容易出现这类字符串格式错误,强烈建议改用参数化查询。
修复后的客户登录代码示例
' 注意:替换Initial Catalog为你的业务数据库名称,不要使用master系统库 Using con As New SqlConnection("Data Source=LEGIONPC;Initial Catalog=你的业务库名;Integrated Security=True") con.Open() ' 修正表名为tbCustomer,同时使用参数化查询 Using cmd As New SqlCommand("select * from tbCustomer where username=@Username and pass=@Password", con) ' 添加参数,避免注入和格式错误 cmd.Parameters.AddWithValue("@Username", txtUsername.Text.Trim()) ' Trim()可防止用户输入首尾空格干扰匹配 cmd.Parameters.AddWithValue("@Password", txtPassword.Text.Trim()) Using sda As New SqlDataAdapter(cmd) Dim dt As New DataTable() sda.Fill(dt) If dt.Rows.Count > 0 Then MessageBox.Show("Correct.", "Log-In") Else MessageBox.Show("Invalid.", "Log-In") End If End Using End Using End Using
额外建议
- 管理员登录代码也存在同样的空格问题和SQL注入风险,建议同步按照上述方式修复。
- 不要将业务表放在
master系统数据库中,创建独立的业务数据库,并修改连接字符串中的Initial Catalog为对应库名。 - 密码不要明文存储,应该使用哈希算法(比如SHA256)加密后存储,登录时对输入密码加密再比对。
内容的提问来源于stack exchange,提问作者Eren Birb
相关产品推荐
相关产品推荐

