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

ASP.NET中根据用户名密码返回用户ID的代码修改方案

修正后的ASP.NET代码及说明

首先,你的原始代码存在几个关键问题:SQL语句未完成、直接拼接用户输入有严重的SQL注入风险,且未正确处理数据库连接的资源释放。下面是完全符合需求的修正代码:

protected void Button4_Click(object sender, EventArgs e)
{
    // 数据库连接字符串
    string connectionString = @"Data Source=HOME\SQL;Initial Catalog=The_Coffe;Integrated Security=True";
    
    // 使用using语句自动释放连接资源,避免内存泄漏
    using (SqlConnection con = new SqlConnection(connectionString))
    {
        // 参数化SQL查询,彻底规避SQL注入
        string sqlQuery = "SELECT C_ID FROM Customer_Register WHERE Email = @Username AND Password = @Password";
        
        using (SqlCommand cmd = new SqlCommand(sqlQuery, con))
        {
            // 绑定输入参数,对应文本框内容
            cmd.Parameters.AddWithValue("@Username", TextBox1.Text);
            cmd.Parameters.AddWithValue("@Password", TextBox2.Text); // 假设密码输入框为TextBox2
            
            con.Open();
            
            // 执行查询并获取单个结果(用户ID)
            object userIdResult = cmd.ExecuteScalar();
            
            if (userIdResult != null)
            {
                // 将查询到的用户ID显示到标签(假设标签为Label1)
                Label1.Text = userIdResult.ToString();
            }
            else
            {
                // 无匹配用户时的提示
                Label1.Text = "用户名或密码错误";
            }
        }
    }
}

核心修正说明:

  • 参数化查询:不再直接把用户输入拼进SQL语句,改用@Username和@Password参数,这是数据库操作的基础安全规范,能彻底防止SQL注入攻击。
  • using语句:自动管理SqlConnection和SqlCommand的生命周期,无需手动调用Close()或Dispose(),避免资源泄漏问题。
  • 完整逻辑补全:补全了密码字段的查询条件,同时添加了结果为空的判断,处理用户名/密码不匹配的场景。
  • 高效结果获取:用ExecuteScalar()直接获取单个查询结果(用户ID),比DataReader更简洁高效。

注:请根据你的实际控件ID调整代码中的TextBox2(密码输入框)和Label1(结果显示标签)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 02:28:15