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
相关产品推荐
相关产品推荐

