【问题标题】:DataTable RejectChanges does not reset all changesDataTable RejectChanges 不会重置所有更改
【发布时间】:2013-07-12 12:18:23
【问题描述】:

我在强类型数据集中的 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();                     
}      

【问题讨论】:

  • 看来我得设置adapterManager.BackupDataSetBeforeUpdate = true;然后通过调用 RejectChanges 将新行从 DataSet 中删除。是否存在性能问题?为什么我需要额外的步骤?有什么想法吗?

标签: datatable dataset reset updating tableadapter


【解决方案1】:

解决办法是设置adapterManager.BackupDataSetBeforeUpdate = true;这会创建数据集的内部备份副本,以便在发生故障时“重用”。

MSDN: Hierarchical Update Overview

“备份副本仅在执行 TableAdapterManager.UpdateAll 方法期间位于内存中。因此,无法以编程方式访问此备份数据集,因为它要么替换原始数据集,要么一旦 TableAdapterManager 超出范围。 UpdateAll 方法已完成运行。”

【讨论】:

    猜你喜欢
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    • 2022-07-14
    • 1970-01-01
    • 1970-01-01
    • 2017-01-10
    相关资源
    最近更新 更多