ASP.NET C#更新函数无报错但未生效,请求排查问题
问题排查与修复方案
核心问题:!IsPostBack 判断导致更新逻辑未执行
按钮点击属于PostBack请求,而你的更新代码被包裹在 if (!IsPostBack) 块中——这个条件仅在页面首次加载时成立,按钮触发的PostBack请求会直接跳过这段代码,所以数据库不会产生任何变化。
修复步骤
直接移除 if (!IsPostBack) 条件判断,让按钮点击时能正常执行更新逻辑:
protected void Button2_Click(object sender, EventArgs e) { string sql = "UPDATE EUTHANASIA SET [DESC] = @DESC, MEDICINE = @MEDICINE, DOSE = @DOSE, UOM = @UOM, STATUS = @STATUS, EXECUTIONDATE = @EXECUTIONDATE, UPDATEDDATE = @UPDATEDDATE WHERE EUTHANASIAID = @EUTHANASIAID"; SqlConnection con = new SqlConnection(cs); SqlCommand cmd = new SqlCommand(sql, con); var culture = new CultureInfo("ms-MY"); string description = Convert.ToString(ddl_Desc.SelectedItem.Value); string medicine = Convert.ToString(ddl_med.SelectedItem.Value); float dose = (float)Convert.ToDouble(txt_Dose.Text); string uom = Convert.ToString(ddl_Uom.SelectedItem.Value); string status = Convert.ToString(ddl_Status.SelectedItem.Value); DateTime executionDate = Convert.ToDateTime(txt_ExeDate.Text, culture); DateTime updatedDate = DateTime.Now; cmd.Parameters.AddWithValue("@DESC", description); cmd.Parameters.AddWithValue("@MEDICINE", medicine); cmd.Parameters.AddWithValue("@DOSE", dose); cmd.Parameters.AddWithValue("@UOM", uom); cmd.Parameters.AddWithValue("@STATUS", status); cmd.Parameters.AddWithValue("@EXECUTIONDATE", executionDate); cmd.Parameters.AddWithValue("@EUTHANASIAID", petNoTxt.Text); cmd.Parameters.AddWithValue("@UPDATEDDATE", updatedDate); con.Open(); int rowsAffected = cmd.ExecuteNonQuery(); Console.Write(rowsAffected); con.Close(); Response.Redirect("BO_EuthanasiaSummary.aspx"); }
额外优化建议
- 使用
using语句自动释放数据库连接,避免连接泄漏:
using (SqlConnection con = new SqlConnection(cs)) { con.Open(); int rowsAffected = cmd.ExecuteNonQuery(); // 其他逻辑 }
- 增加异常捕获,处理日期格式错误、数值转换失败等问题,方便后续排查:
try { // 更新逻辑代码 } catch (Exception ex) { Console.WriteLine(ex.Message); // 可添加日志记录或用户提示逻辑 }
- 检查
rowsAffected的值,如果返回0,说明没有匹配到EUTHANASIAID对应的记录,需要验证petNoTxt.Text的值是否在数据库中存在。
内容的提问来源于stack exchange,提问作者user19914311
相关产品推荐
相关产品推荐

