【发布时间】: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