DataTable RejectChanges不会重置所有更改

时间:2013-07-12 12:18:23

标签: datatable dataset reset updating tableadapter

我在强类型DataSet中向DataTable添加了几行,并使用TableAdapterManager将更改插入到我的数据库中。使用TableAdapterManager的UpdateAll函数会导致所有插入行的数据库回滚失败。不幸的是,DataTable.RejectChanges不会“回滚”DataTable中的相同行。 在对DataTable.RejectChanges方法的调用中,只从DataTable中删除最后一行。我希望DataSet具有与数据库相同的状态 是不是每个MSDN文档的RejectChanges删除所有新的(未注释的)行?我做错了吗?

我的代码:

foreach (var item in List)
{
   DataSet.customerRow custRow = ds.customer.NewcustomerRow();
   custRow.name = item.Name;
   try
   {                         
       ds.customer.AddcustomerRow(custRow);   
   }
   catch (Exception ex)
   {
       ProcessException(ex, System.Reflection.MethodBase.GetCurrentMethod().Name);
       valid=false;
   }                   
}
if (valid)
{
    DataSetTableAdapters.TableAdapterManager adapterManager = new DataSetTableAdapters.TableAdapterManager();                    
    adapterManager.customerTableAdapter = new DataSetTableAdapters.customerTableAdapter();                    
    try
    {                        
        retryPolicy.ExecuteAction(() =>
            {
            adapterManager.UpdateAll(ds);
            });
    }
    catch (Exception ex)
    {                       
        ds.customer.RejectChanges();
    }
}
else
{
    ds.customer.RejectChanges();                     
}      

1 个答案:

答案 0 :(得分:0)

解决方案是设置adapterManager.BackupDataSetBeforeUpdate = true;这将创建数据集的内部备份副本,以便在出现故障时“重复使用”。

MSDN: Hierarchical Update Overview

  

“执行TableAdapterManager.UpdateAll方法时,备份副本仅在内存中。因此,无法以编程方式访问此备份数据集,因为它会替换原始数据集,或者在TableAdapterManager后立即超出范围。 UpdateAll方法已经完成运行。“