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

编程新手求助:如何在SQL Server中存储含用户类型的登录信息

将登录信息存入SQL Server数据库的分步指南

嘿,作为编程新手能想到分用户类型来设计登录系统挺棒的!下面我一步步教你把这些信息存入SQL Server数据库,全程用最安全的参数化查询方式,避免SQL注入风险:

1. 先准备好数据库表

首先你得在SQL Server里创建一个存储用户信息的表,比如叫Users,字段要对应你的表单内容:

CREATE TABLE Users (
    UserID VARCHAR(50) PRIMARY KEY, -- 用户ID设为主键,确保唯一
    PasswordHash VARCHAR(255) NOT NULL, -- 存加密后的密码,别存明文!
    UserType VARCHAR(20) NOT NULL -- 对应你的三种用户类型,比如'管理员'/'普通用户'/'访客'
);

2. 编写WinForms代码(假设你用的是C# WinForms)

接下来在你的表单提交按钮(比如btnSave_Click事件)里写逻辑:

步骤2.1 获取表单输入的值

先把TextBox和ComboBox里的内容取出来,记得做简单的空值校验:

string userId = txtUserID.Text.Trim();
string password = txtPassword.Text.Trim();
string userType = cboUserType.SelectedItem.ToString();

// 空值校验,避免空数据存入
if (string.IsNullOrEmpty(userId) || string.IsNullOrEmpty(password) || string.IsNullOrEmpty(userType))
{
    MessageBox.Show("请填写完整的用户信息!");
    return;
}

步骤2.2 加密密码(非常重要!)

绝对不能把明文密码存进数据库,这里用.NET生态常用的BCrypt来加密(需要先通过NuGet安装BCrypt.Net-Next包):

string passwordHash = BCrypt.Net.BCrypt.HashPassword(password);

步骤2.3 建立数据库连接并执行插入操作

用参数化查询来避免SQL注入,这是新手一定要养成的好习惯:

// 替换成你的SQL Server连接字符串,本地数据库示例:
string connectionString = @"Data Source=YOUR_SERVER_NAME;Initial Catalog=YOUR_DATABASE_NAME;Integrated Security=True;";

// 用using语句自动释放资源,避免内存泄漏
using (SqlConnection conn = new SqlConnection(connectionString))
{
    try
    {
        conn.Open();
        // 参数化的插入SQL语句,用@占位符代替直接拼接内容
        string sql = "INSERT INTO Users (UserID, PasswordHash, UserType) VALUES (@UserID, @PasswordHash, @UserType)";
        
        using (SqlCommand cmd = new SqlCommand(sql, conn))
        {
            // 绑定参数,对应表的字段
            cmd.Parameters.AddWithValue("@UserID", userId);
            cmd.Parameters.AddWithValue("@PasswordHash", passwordHash);
            cmd.Parameters.AddWithValue("@UserType", userType);
            
            // 执行插入操作,返回受影响的行数
            int rowsAffected = cmd.ExecuteNonQuery();
            
            if (rowsAffected > 0)
            {
                MessageBox.Show("用户信息保存成功!");
                // 清空表单方便下次输入
                txtUserID.Clear();
                txtPassword.Clear();
                cboUserType.SelectedIndex = -1;
            }
            else
            {
                MessageBox.Show("保存失败,请重试!");
            }
        }
    }
    catch (Exception ex)
    {
        // 捕获异常并提示,方便调试
        MessageBox.Show($"出错了:{ex.Message}");
    }
}

3. 关键注意事项

  • 永远不要用字符串拼接SQL语句:比如"INSERT INTO Users VALUES ('" + userId + "', ...)",这种写法会被SQL注入攻击,非常危险。
  • 密码必须加密:上面用的BCrypt是目前比较安全的哈希算法,不要用MD5、SHA1这些已经不安全的算法。
  • 连接字符串要妥善保管:别硬编码在代码里,最好存在配置文件(比如app.config)里,方便后续修改。

内容的提问来源于stack exchange,提问作者user9214987

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:30:22