5

いくつかの関連するテーブルを含む型付きデータセットと、それらのテーブル間に定義された関係を用意します。データフィードを処理するときは、レコードを追加、変更、削除してから、各テーブルでupdateを呼び出します。

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

型付きデータセットを使用する理由は、既存のデータをチェックして、レコードを追加、変更、または削除しているかどうかを判断する必要があるためです...したがって、作業しているすべてのものの完全なダンプが必要です(代替は10,000になります)レコードを1つずつ処理するときに、データベースに対してクエリを実行します)。

トランザクションサポートが必要ですが、型指定されたデータセットでそれを行う方法がわかりません。たとえば、新しい再承認を作成するときに、新しいリクエストを作成しています。ただし、再承認の更新に失敗した場合は、リクエストを保持したくありません。

更新呼び出しをの下に置くことは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;
        }


    }

2番目..テーブルアダプターマネージャー..

  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 に答える