具有包含多个相关表的类型化数据集,以及在这些表之间定义的关系。当我处理数据馈送时,我正在添加,修改和删除记录,然后在每个表上调用update。
Requests Reapprovals UserRole
RequestId ----- RequestId ----- RoleId
Reason RoleId ----/ UserId
使用类型化数据集的原因是我必须检查现有数据以确定我是在添加,修改还是删除记录......所以我需要完全转储我正在使用的所有内容(替代方案)当我逐个处理记录时,将对数据库进行10,000次查询。
我想要事务支持,但我没有看到使用类型化数据集的方法。例如,我在创建新的重新批准时创建了一个新请求。但如果重新批准无法更新,我不想保留请求。
将更新调用置于TransactionScope
下意味着如果任何记录失败,它们都会失败。不是我想要的。
如何在类型化数据集中提交或回滚相关行?
答案 0 :(得分:3)
您可以使用常规事务并从TableAdapterManager实现类似事务的事务,如下例所示。
使用常规交易的第一种方法,
public void savewithTransacition()
{
DataSet1TableAdapters.Table1TableAdapter taTbl1 = new DataSet1TableAdapters.Table1TableAdapter();
DataSet1TableAdapters.Table2TableAdapter taTbl2 = new DataSet1TableAdapters.Table2TableAdapter();
SqlTransaction st = null;
SqlConnection sc = new SqlConnection("ur conneciton string");
try
{
sc.Open();
st = sc.BeginTransaction();
taTbl1.Transaction = st;
taTbl2.Transaction = st;
st.Commit();
}
catch (System.Exception ex)
{
st.Rollback();
throw ex;
}
}
Second..with table adapter manager ..
public void SaveWithManager()
{
DataSet1TableAdapters.TableAdapterManager mgr1 = new DataSet1TableAdapters.TableAdapterManager();
DataSet1TableAdapters.Table1TableAdapter taTbl1 = new DataSet1TableAdapters.Table1TableAdapter();
DataSet1TableAdapters.Table2TableAdapter taTbl2 = new DataSet1TableAdapters.Table2TableAdapter();
mgr1.Table1TableAdapter = taTbl1;
mgr1.Table2TableAdapter = taTbl2;
mgr1.UpdateOrder = DataSet1TableAdapters.TableAdapterManager.UpdateOrderOption.InsertUpdateDelete;
mgr1.UpdateAll(this);
}
使用此选项,您可以为要保存的表组创建TAManagers。就像你想要一个组保存,即使另一个组失败一样。
答案 1 :(得分:0)
您可以将事务范围与不同的范围选项一起使用