我在强类型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();
}
答案 0 :(得分:0)
解决方案是设置adapterManager.BackupDataSetBeforeUpdate = true;这将创建数据集的内部备份副本,以便在出现故障时“重复使用”。
MSDN: Hierarchical Update Overview
“执行TableAdapterManager.UpdateAll方法时,备份副本仅在内存中。因此,无法以编程方式访问此备份数据集,因为它会替换原始数据集,或者在TableAdapterManager后立即超出范围。 UpdateAll方法已经完成运行。“