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

C#按筛选条件修改数据集行后无法保存,求助技术解决方案

解决DataRow修改后无法保存的问题

看起来你遇到的问题是修改DataSet中的行数据后,这些更改没能同步到数据库里对吧?我来帮你拆解下问题所在,以及怎么修复:

问题根源分析

你写的两种写法都存在一个关键问题:过早调用了AcceptChanges()。这个方法会把DataRow的状态从Modified改成Unchanged,相当于告诉DataSet“这些修改已经确认完成”,但实际上你还没把这些更改同步到数据库。后续当你想用DataAdapter更新数据库时,它会因为找不到状态为Modified的行,直接跳过更新操作。

另外,第二种写法里的Select语句如果nsuc或bod是字符串类型的话,还会触发语法错误(没给字符串值加单引号),不过看你之前的代码里是转成int处理,应该是数值类型,这个暂时没问题,但还是要记下来避免踩坑。

修复步骤

1. 移除AcceptChanges()的提前调用

先把代码里的dr.AcceptChanges()和rowp.AcceptChanges()都删掉,让DataRow保持Modified状态,这样DataAdapter才能识别出哪些行需要更新。

2. 用DataAdapter同步更改到数据库

修改完所有符合条件的行之后,必须调用你用来填充DataSet的DataAdapter的Update()方法,把DataSet里的变化提交到数据库。

修正后的代码示例

第一种遍历写法的修正:

foreach(DataRow dr in datosingDataSet.Tables["inve"].Rows) // 遍历整张表
{
    cc = Convert.ToInt32(dr["nsuc"].ToString());
    ff = Convert.ToInt32(dr["bod"].ToString());
    if (cc == csuc && ff == bod) // 筛选条件匹配
    {
        MessageBox.Show("** SI SE HACE LA CONSULTA**", "ERROR");
        dr["estado"] = "AP"; // 修改字段值
        // 不要在这里调用AcceptChanges()
        // break; 是否终止遍历按需选择
    }
}

// 遍历完成后,用DataAdapter将更改同步到数据库
// 假设你的DataAdapter实例名为inveDataAdapter
inveDataAdapter.Update(datosingDataSet, "inve");
// 最后可以调用AcceptChanges确认所有更改(可选,根据业务需求决定)
datosingDataSet.Tables["inve"].AcceptChanges();

第二种Select写法的修正:

foreach(DataRow rowp in datosingDataSet.inve.Select("nsuc = " + csuc + " and bod = " + bod))
{
    rowp["estado"] = "AP";
    // 不要在这里调用AcceptChanges()
}

// 同步更改到数据库
inveDataAdapter.Update(datosingDataSet, "inve");
datosingDataSet.Tables["inve"].AcceptChanges();

额外注意事项

  • 确保你的DataAdapter已经正确配置了UpdateCommand,这样它才能生成正确的SQL更新语句。如果是手动配置的,要保证UpdateCommand包含正确的WHERE条件和要更新的字段。
  • 如果nsuc或bod是字符串类型,Select语句里要给值加单引号,比如:"nsuc = '" + csuc + "' and bod = '" + bod + "'",不过更推荐用Linq查询来避免SQL注入风险,示例如下:
var targetRows = from DataRow r in datosingDataSet.inve.Rows
                 where r.Field<string>("nsuc") == csuc && r.Field<string>("bod") == bod
                 select r;
foreach (var row in targetRows)
{
    row["estado"] = "AP";
}

内容的提问来源于stack exchange,提问作者Cesar Ivan Ardila Vega

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:52:08