C# WinForm注册功能如何检测数据库Login表中Username是否已存在
C# WinForm注册模块用户名重复校验修复方案
核心改动点
- 新增注册前用户名存在性校验逻辑,使用参数化查询避免SQL注入风险
- 新增异常捕获逻辑,避免数据库操作出错直接导致程序崩溃
- 改用using语句管理数据库连接生命周期,自动释放资源,避免连接泄漏
- 补充空字段判断的严谨性,过滤空白字符输入
using System; using System.Windows.Forms; using System.Data.SqlClient; namespace Proton_System { public partial class Register : Form { // 连接字符串单独封装,方便后续统一修改 private readonly string _connStr = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\baich\Documents\Data.mdf;Integrated Security=True;Connect Timeout=30"; public Register() { InitializeComponent(); } private void buttonRegister_Click(object sender, EventArgs e) { // 校验空字段 if (string.IsNullOrWhiteSpace(textBox1.Text) || string.IsNullOrWhiteSpace(textBox2.Text) || string.IsNullOrWhiteSpace(textBox3.Text)) { MessageBox.Show("用户名或密码字段不能为空", "注册失败", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } // 校验两次密码一致性 if (textBox2.Text != textBox3.Text) { MessageBox.Show("两次输入的密码不一致", "注册失败", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } // 数据库操作全局捕获异常 try { // using语句会自动释放连接资源,无需手动关闭 using (SqlConnection con = new SqlConnection(_connStr)) { con.Open(); // 第一步:校验用户名是否已存在,参数化查询避免SQL注入 string checkSql = "SELECT COUNT(*) FROM Login WHERE Username = @Username"; using (SqlCommand checkCmd = new SqlCommand(checkSql, con)) { checkCmd.Parameters.AddWithValue("@Username", textBox1.Text.Trim()); int userCount = (int)checkCmd.ExecuteScalar(); // 返回结果大于0说明用户名已存在 if (userCount > 0) { MessageBox.Show("该用户名已被注册,请更换其他用户名", "注册失败", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } // 第二步:用户名不存在时执行插入操作 string insertSql = "INSERT INTO Login (Username, Password) VALUES (@Username, @Password)"; using (SqlCommand insertCmd = new SqlCommand(insertSql, con)) { insertCmd.Parameters.AddWithValue("@Username", textBox1.Text.Trim()); insertCmd.Parameters.AddWithValue("@Password", textBox2.Text); insertCmd.ExecuteNonQuery(); } MessageBox.Show("账号注册成功", "注册成功", MessageBoxButtons.OK, MessageBoxIcon.Information); // 注册成功直接跳转登录页 Login Form1 = new Login(); Form1.Show(); this.Hide(); } } catch (Exception ex) { MessageBox.Show($"注册过程出现错误:{ex.Message}", "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void button1_Click(object sender, EventArgs e) { Login Form1 = new Login(); Form1.Show(); this.Hide(); } } }
安全提示:上述代码为基础功能实现,生产环境禁止明文存储密码,建议使用BCrypt、SHA256加盐等方式对密码做哈希加密后再存入数据库,避免数据泄露导致用户密码直接暴露。
内容的提问来源于stack exchange,提问作者user17088449
相关产品推荐
相关产品推荐

