如何在Visual Studio C# Windows Form中向SQL数据库添加用户信息并生成唯一UserID
实现C# WinForm注册信息存入SQL数据库并自动生成主键UserID
1. 先创建SQL用户表
首先在你的SQL数据库中创建用户表,将UserID设为自增主键,数据库会自动为每条新插入的数据生成唯一ID:
CREATE TABLE Users ( UserID INT IDENTITY(1,1) PRIMARY KEY, -- 自增主键,自动生成唯一标识 Username NVARCHAR(50) NOT NULL UNIQUE, -- 添加唯一约束避免重复用户名 Password NVARCHAR(255) NOT NULL -- 务必存储哈希后的密码,禁止明文存储 );
2. WinForm注册逻辑代码实现
假设注册按钮名为btnRegister,在其点击事件中编写以下代码:
using System.Data.SqlClient; using System.Security.Cryptography; using System.Text; using System.Configuration; private void btnRegister_Click(object sender, EventArgs e) { // 获取并清洗输入内容 string username = txtUser.Text.Trim(); string rawPassword = txtPass.Text.Trim(); // 基础输入校验 if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(rawPassword)) { MessageBox.Show("用户名和密码不能为空!"); return; } // 读取配置文件中的数据库连接字符串(推荐方式) string connectionString = ConfigurationManager.ConnectionStrings["UserDbConn"].ConnectionString; // 对密码进行哈希处理(核心安全要求) string hashedPassword = HashPassword(rawPassword); try { // 使用using自动释放数据库连接资源 using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); // 参数化查询,彻底避免SQL注入 string insertSql = "INSERT INTO Users (Username, Password) VALUES (@Username, @Password)"; using (SqlCommand cmd = new SqlCommand(insertSql, conn)) { cmd.Parameters.AddWithValue("@Username", username); cmd.Parameters.AddWithValue("@Password", hashedPassword); int affectedRows = cmd.ExecuteNonQuery(); if (affectedRows > 0) { MessageBox.Show("注册成功!"); // 清空输入框 txtUser.Clear(); txtPass.Clear(); } else { MessageBox.Show("注册失败,请重试"); } } } } catch (SqlException ex) { // 针对性处理唯一约束冲突(用户名重复) if (ex.Number == 2627) { MessageBox.Show("该用户名已被注册,请更换"); } else { MessageBox.Show($"数据库错误:{ex.Message}"); } } catch (Exception ex) { MessageBox.Show($"操作出错:{ex.Message}"); } } // 密码哈希实现(示例用SHA256,更推荐BCrypt等带加盐的哈希算法) private string HashPassword(string password) { using (SHA256 sha256 = SHA256.Create()) { byte[] passwordBytes = Encoding.UTF8.GetBytes(password); byte[] hashBytes = sha256.ComputeHash(passwordBytes); StringBuilder hashBuilder = new StringBuilder(); foreach (byte b in hashBytes) { hashBuilder.Append(b.ToString("x2")); } return hashBuilder.ToString(); } }
3. 关键注意事项
- 连接字符串配置:建议将连接字符串放在
App.config中,方便后续修改,示例配置如下:<connectionStrings> <add name="UserDbConn" connectionString="Data Source=你的SQL服务器地址;Initial Catalog=你的数据库名;Integrated Security=True;" providerName="System.Data.SqlClient" /> </connectionStrings> - 密码安全:示例中用了SHA256哈希,更推荐使用BCrypt(可通过NuGet安装
BCrypt.Net-Next包),它自带加盐机制,能有效抵御彩虹表攻击。 - 异常处理:针对
SqlException的错误码做针对性处理,能提升用户体验,避免模糊的错误提示。
内容的提问来源于stack exchange,提问作者Intahim Ahmed
相关产品推荐
相关产品推荐

