1

変数にデータセットを作成するためにレコードセットの宛先を使用します。後でスクリプトコンポーネント(ソース)で変数readonlyを使用しますが、他のスクリプトコンポーネント(ソース)でこの変数を使用しようとすると、空のデータセットが取得されます。最初のスクリプトコンポーネントが私の変数をブロックしたと思いますが、それを修正する方法がわかりません。

VariableDispenser variableDispenser = (VariableDispenser)this.VariableDispenser;
        variableDispenser.LockForRead("User::dsOrganization");
        IDTSVariables100 vars;
        variableDispenser.GetVariables(out vars);

        OleDbDataAdapter oleDA = new OleDbDataAdapter();
        DataTable dt = new DataTable();
        var ds = vars["User::dsOrganization"].Value;
        oleDA.Fill(dt, ds);
        foreach (DataRow dr in dt.Rows)
        {
            Output0Buffer.AddRow();
            Output0Buffer.Organization = dr["Organization"].ToString();
            Output0Buffer.OrganizationCode = dr["OrganizationCode"].ToString();
            Output0Buffer.SPOrganizationCode = dr["SPOrganizationCode"].ToString();
            Output0Buffer.SPOrganizationMember = dr["SPOrganizationMember"].ToString();
        }
        vars.Unlock();

2つのスクリプトコンポーネントは等しいコードを使用します最初のコンポーネントは2番目に44行を取得します-なし

スクリプトコンポーネントをスクリプトタスクに変更すると、すべてが正しく機能します。

4

1 に答える 1

1

問題は、列挙子のポインターがレコードセットの最後にあることです。データセットにロードする前に、レコードセットのクローンを作成してみてください。

ただし、大きなデータ セットを変数にロードすることは避ける必要があります。フローの設計を評価して最適化してください。

于 2012-05-02T13:25:50.053 に答える