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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 17:07:28