5

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

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

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

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

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

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

4

2 回答 2

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;
        }


    }

第二..与表适配器管理器..

  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);
    }

使用此选项,您可以为要保存的表组创建 TAManager。就像您希望一组保存,即使另一组失败。

于 2010-12-20T17:05:01.453 回答
0

您可以使用具有不同范围选项的事务范围

于 2010-12-21T18:18:42.737 回答