【问题标题】:SSIS Write to object variable through script taskSSIS通过脚本任务写入对象变量
【发布时间】:2015-03-27 08:13:51
【问题描述】:

我有一些代码,我想最终得到 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;

【问题讨论】:

    标签: c# variables object ssis task


    【解决方案1】:
    1. 您需要创建一个包可以使用的变量。在VS2010中,你可以点击SSIS->Variables菜单选项打开Variables窗口。单击“添加新”,然后添加您的列表。我将使用名称 minList 和 maxList。它们的数据类型应该是“对象”。
    2. 在您的脚本任务中,您可以将这些对象实例化为列表。但首先,您需要访问它们。打开您的脚本任务,并将它们添加为 ReadWriteVariables。在“选择变量”模式对话框中为每个选项添加复选标记。
    3. 现在您已将它们添加为 ReadWriteVariables,请单击编辑脚本。添加 System.Collections.Generic 命名空间以使用 List 数据类型。现在,实例化列表。

      Dts.Variables["User::minList"].Value = new List&lt;DateTime&gt;(); Dts.Variables["User::minList"].Value = new List&lt;DateTime&gt;();

    4. 您可以通过执行以下操作为您的变量创建更易于管理的变量名称:

      List&lt;DateTime&gt; minDateList = (List&lt;DateTime&gt;)Dts.Variables["User::minList"].Value;

    5. 最后,您可以使用 List 的 Add 方法将这些值添加到列表对象中。我会将它们添加到您从 reader.Read() 读取的循环中。

    6. 然后,在 Foreach 循环编辑器中,您将选择 Foreach From Variable Enumerator 和列表变量之一。

    【讨论】:

    • 我如何添加你说的值?我只能循环遍历一个变量,我该怎么做另一个变量?我需要这两个值。
    • 如果我使用步骤号 4 List minDateList = (List)Dts.Variables["User::minlist"].Value; - 我收到此错误:无法将“System.Object”类型的对象转换为“System.Collections.Generic.List`1[System.DateTime]”。
    • 我修复了这个错误,这是我的错!但是我们如何从两个列表中获取值到我的循环中,以便我可以将两个值都分配给 foeachloop 中的变量?
    • 抱歉,第 4 步包含错误。我错误地有一个 List
    • 查看多维对象。见stackoverflow.com/questions/1596530/…
    【解决方案2】:

    首先创建一个DataType Object的SSIS变量“objListOfMinDates”。然后,当您右键单击脚本任务时,在脚本任务编辑器上,选择该变量 User::objListOfMinDates。它将在用户变量部分下。然后,在脚本任务中创建并使用局部变量“localListOfMinDates”。最后在脚本的最后,像这样分配给“objListOfMinDates”:

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

    然后您将能够在脚本任务之外的 foreach 循环中使用该变量。显然,您可以对两个变量(最小值和最大值)执行此操作。只需创建两者,将两者都选为 readWrite,然后在脚本任务中分配。

    【讨论】:

    • 但是我有 2 个包含数据的列表?我需要两个数据值?
    • 然后使用这篇文章中的对象列表:stackoverflow.com/questions/5069282/…
    • 我不太擅长 C#,但二维列表看起来是一种正确的方法。但是如果我们从我的例子中出去,我会怎么写呢?我应该如何使列表正确并将 2 个值分配给列表?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多