簡體   English   中英

SSIS通過腳本任務寫入對象變量

[英]SSIS Write to object variable through script task

我有一些代碼,我想最終得到2個列表。 開始和結束。

它們包含月份的開始日期和月份的結束日期。

這兩個列表我想放入一個對象變量,所以我可以在ssis中的foreachloop容器中使用該對象,並使用startofmonth和endofmonthdates(變量:min和max)遍歷每一行 - 但我不知道如何

這是我的代碼:

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;
  1. 您需要創建包可以使用的變量。 在VS2010中,您可以單擊SSIS-> Variables菜單選項以打開Variables窗口。 點擊“添加新”,然后添加您的列表。 我將使用名稱minList和maxList。 他們的數據類型應該是'對象'。
  2. 在腳本任務中,您可以將這些對象實例化為列表。 但首先,您需要訪問它們。 打開腳本任務,並將它們添加為ReadWriteVariables。 在“選擇變量”模式對話框中為每個選項添加復選標記。 selectVar
  3. 現在您已將它們添加為ReadWriteVariables,單擊“編輯腳本”。 添加System.Collections.Generic命名空間以使用List數據類型。 現在,實例化列表。

    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和一個列表變量。 foreach循環

首先創建DataType對象的SSIS變量“objListOfMinDates”。 然后,當您右鍵單擊腳本任務時,在腳本任務編輯器上,選擇該變量User :: objListOfMinDates。 它將在用戶變量部分下。 然后,在腳本任務中只創建並使用局部變量“localListOfMinDates”。 最后在腳本結束時只需分配給“objListOfMinDates”,如下所示:

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

然后,您將能夠在腳本任務之外的foreach循環中使用該變量。 顯然,你可以為兩個變量(min和max)執行此操作。 只需創建兩者,選擇readWrite,並在腳本任務中分配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM