web-dev-qa-db-ja.com

スクリプトタスクを介したSSISオブジェクト変数への書き込み

私は私が2つのリストで終わることを望むいくつかのコードを持っています。始まりと終わり。

それらには、月の開始日と月の終了日が含まれます。

Ssisのforeachloopコンテナでオブジェクトを使用し、startofmonthとendofmonthdates(変数:最小と最大)で各行をループできるように、オブジェクト変数に入れたいこれら2つのリスト-しかし、方法がわかりません

これが私のコードです:

String s = "2013-01-01";
         String b = "2014-01-01";

    using (SqlConnection connection = new SqlConnection("Server=localhost;Initial Catalog=LegOgSpass;Integrated Security=SSPI;Application Name=SQLNCLI11.1"))
    {
        connection.Open();
        string query = "select mindate,maxdate from dbo.dates";
        using (SqlCommand command = new SqlCommand(query, connection))
        {
            using (SqlDataReader reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    s = reader.GetDateTime(0).ToShortDateString();
                    b = reader.GetDateTime(1).ToShortDateString();

                    //minDate.Add(reader.GetDateTime(0));
                    //maxDate.Add(reader.GetDateTime(1));
                }
            }
        }
    }

            DateTime startdate = Convert.ToDateTime(s);
            DateTime enddate = Convert.ToDateTime(b);
            DateTime parseDate;

            List<DateTime> minDate = new List<DateTime>();
            List<DateTime> maxDate = new List<DateTime>();

            List<DateTime> startings = new List<DateTime>();
            List<DateTime> endings = new List<DateTime>();


            startings.Add(startdate);
            parseDate = startdate.AddMonths(1);

            while (parseDate.Day != 1)
                parseDate = parseDate.AddDays(-1);
            parseDate = parseDate.AddDays(-1);


            endings.Add(parseDate);
            while (parseDate < enddate)
            {
                parseDate = parseDate.AddDays(1);


                startings.Add(parseDate);
                parseDate = parseDate.AddMonths(1);
                parseDate = parseDate.AddDays(-1);

               endings.Add(parseDate);

            }
            endings[endings.Count() - 1] = enddate;


            for (var x = 0; x < startings.Count; x++)
            {
                Dts.Variables["test"].Value = x;
            }


        Dts.TaskResult = (int)ScriptResults.Success;
6
SqlKindaGuy
  1. パッケージが使用できる変数を作成する必要があります。 VS2010では、SSIS-> Variablesメニューオプションをクリックして、Variablesウィンドウを開くことができます。 [新規追加]をクリックして、リストを追加します。 minListとmaxListという名前を使用します。それらのデータ型は「オブジェクト」である必要があります。
  2. スクリプトタスクでは、これらのオブジェクトをリストとしてインスタンス化できます。しかし、最初に、それらにアクセスする必要があります。スクリプトタスクを開き、ReadWriteVariablesとして追加します。 [変数の選択]モーダルダイアログでそれぞれにチェックマークを追加します。 selectVar
  3. それらをReadWriteVariablesとして追加したので、[スクリプトの編集]をクリックします。 Listデータ型を使用するには、System.Collections.Generic名前空間を追加します。次に、リストをインスタンス化します。

    Dts.Variables["User::minList"].Value = new List<DateTime>();Dts.Variables["User::minList"].Value = new List<DateTime>();

  4. 次の操作を行うと、変数の管理しやすい変数名を作成できます。

    List<DateTime> minDateList = (List<DateTime>)Dts.Variables["User::minList"].Value;

  5. 最後に、ListのAddメソッドを使用して、これらの値をリストオブジェクトに追加できます。 reader.Read()から読み取っているループ内に追加します。

  6. Foreachループエディターで、Foreach From Variable Enumeratorとリスト変数の1つを選択します。 ForeachLoop

9
sorrell

最初に、DataTypeオブジェクトのSSIS変数「objListOfMinDates」を作成します。次に、スクリプトタスクを右クリックして、スクリプトタスクエディターで、その変数User :: objListOfMinDatesを選択します。これは、ユーザー変数セクションの下にあります。次に、スクリプトタスクでローカル変数「localListOfMinDates」を作成して使用します。最後に、スクリプトの最後に、次のように「objListOfMinDates」に割り当てます。

Dts.Variables["User::objListOfMinDates"].Value = localListOfMinDates;

その後、スクリプトタスクの外部でforeachループで変数を使用できるようになります。明らかに、これは2つの変数(最小と最大)に対して実行できます。両方を作成し、readWriteとして両方を選択して、スクリプトタスクに割り当てます。

0
BBauer42