Typed DataSet中的事务

时间:2010-12-20 15:41:09

标签: c# transactions strongly-typed-dataset datafeed

具有包含多个相关表的类型化数据集,以及在这些表之间定义的关系。当我处理数据馈送时,我正在添加,修改和删除记录,然后在每个表上调用update。

Requests        Reapprovals        UserRole
 RequestId ----- RequestId    ----- RoleId 
 Reason          RoleId  ----/      UserId 

使用类型化数据集的原因是我必须检查现有数据以确定我是在添加,修改还是删除记录......所以我需要完全转储我正在使用的所有内容(替代方案)当我逐个处理记录时,将对数据库进行10,000次查询。

我想要事务支持,但我没有看到使用类型化数据集的方法。例如,我在创建新的重新批准时创建了一个新请求。但如果重新批准无法更新,我不想保留请求。

将更新调用置于TransactionScope下意味着如果任何记录失败,它们都会失败。不是我想要的。

如何在类型化数据集中提交或回滚相关行?

2 个答案:

答案 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)

您可以将事务范围与不同的范围选项一起使用