ASP.NET中C#更新SQL Server数据库:无编译错误但未更新,代码问题排查
问题排查:代码无编译错误但数据库未更新
让我来帮你定位这个数据库不更新的问题,你的代码里存在几个关键问题:
1. 更新参数引用错误(核心原因)
在savechanges_Click方法中,你给@fname参数赋值的是sfname,但这个变量根本没有定义!数据库接收不到你要更新的新值,这就是数据库完全没变化的核心原因。
你应该使用文本框fname的输入内容,也就是fname.Text.Trim()来给参数赋值。
2. 数据加载时的字段不匹配(附带问题)
在Page_Load的查询逻辑里,你写的SQL是select fname from table1 where rno = @rno,但读取数据时却用了reader["xcountry"],这会导致页面加载时无法正确显示原有数据,虽然不影响更新操作,但也是需要修正的错误。
3. 数据库资源释放的优化建议(非直接原因,但更规范)
当前代码手动调用Dispose()和Close()来释放资源,建议改用using语句,它会自动帮你释放数据库连接和命令对象,避免资源泄漏,代码也更简洁。
修正后的关键代码
修正后的savechanges_Click方法
protected void savechanges_Click(object sender, EventArgs e) { string connectionString = @"Data Source = (localdb)\MSSQLLocalDB; Initial Catalog = db1; Integrated Security = True"; // 使用using自动释放连接 using(SqlConnection cnn = new SqlConnection(connectionString)) { cnn.Open(); String sql = "update table1 set fname=@fname where rno = @rno"; // 使用using自动释放命令 using(SqlCommand command = new SqlCommand(sql, cnn)) { // 修正参数引用,使用fname.Text.Trim() command.Parameters.AddWithValue("@fname", fname.Text.Trim()); command.Parameters.AddWithValue("@rno", rno.Text.Trim()); // 可选:捕获返回值查看影响行数,方便调试 int affectedRows = command.ExecuteNonQuery(); } } fName.ReadOnly = true; }
修正后的Page_Load数据读取部分
if (reader.Read()) { // 把xcountry改成fname,和查询的字段对应 fname.Text = reader["fname"].ToString().Trim(); }
内容的提问来源于stack exchange,提问作者Gaurav Thapa
相关产品推荐
相关产品推荐

