ASP.NET中使用Session更新用户姓名记录失败问题求助
ASP.NET中使用Session更新用户姓名的修复方案
你的代码存在几个关键问题导致更新失败:
- 未执行SQL更新命令:创建
SqlCommand对象后,没有调用ExecuteNonQuery()方法,数据库根本没收到更新请求 - 提前关闭数据库连接:在命令执行前就调用了
con.Close(),导致命令无法正常执行 - 存在SQL注入风险:直接拼接用户输入和Session值到SQL语句中,极易引发安全问题
- 资源管理不当:未用
using语句管理数据库连接和命令,可能造成连接池泄漏
修正后的代码:
protected void submit_Click(object sender, EventArgs e) { Label2.Text = Session["id"]?.ToString() ?? string.Empty; // 使用using自动释放连接和命令资源 using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString)) { string updateQuery = "UPDATE register SET name = @Name WHERE email = @Email"; using (SqlCommand cmd = new SqlCommand(updateQuery, con)) { // 参数化查询避免SQL注入 cmd.Parameters.AddWithValue("@Name", name.Text); cmd.Parameters.AddWithValue("@Email", Session["id"]?.ToString() ?? string.Empty); con.Open(); // 执行更新命令 int affectedRows = cmd.ExecuteNonQuery(); // 可选:根据受影响行数判断更新结果 if (affectedRows > 0) { Label2.Text = "姓名更新成功"; } else { Label2.Text = "未找到匹配的用户记录"; } } } }
关键改进说明:
using语句自动管理连接和命令资源,无需手动调用Close(),避免资源泄漏- 参数化查询替代字符串拼接,彻底规避SQL注入风险
- 调用
ExecuteNonQuery()执行更新,返回的受影响行数可用于验证更新是否成功 - 添加空值判断,避免
Session["id"]为null时引发空引用异常
内容的提问来源于stack exchange,提问作者Kargathiya Satish
相关产品推荐
相关产品推荐

