C# SSIS通过脚本任务写入对象变量

C# SSIS通过脚本任务写入对象变量,c#,variables,object,ssis,task,C#,Variables,Object,Ssis,Task,我有一些代码,我想以两个列表结束。开始和结束 它们包含月份的开始日期和结束日期 这两个列表我想放在一个对象变量中,这样我就可以在ssis的foreachloop容器中使用该对象,并使用startofmonth和endofmonthdates(变量:min和max)循环每一行,但我不知道如何操作 这是我的密码: String s = "2013-01-01"; String b = "2014-01-01"; using (SqlConnection connectio

我有一些代码,我想以两个列表结束。开始和结束

它们包含月份的开始日期和结束日期

这两个列表我想放在一个对象变量中,这样我就可以在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;
String s=“2013-01-01”;
字符串b=“2014-01-01”;
使用(SqlConnection=newsqlconnection(“Server=localhost;initialcatalog=legogspas;integratedsecurity=SSPI;applicationname=SQLNCLI11.1”))
{
connection.Open();
string query=“从dbo.dates中选择mindate、maxdate”;
使用(SqlCommand=newsqlcommand(查询、连接))
{
使用(SqlDataReader=command.ExecuteReader())
{
while(reader.Read())
{
s=reader.GetDateTime(0.ToSortDateString();
b=reader.GetDateTime(1.ToSortDateString();
//Add(reader.GetDateTime(0));
//Add(reader.GetDateTime(1));
}
}
}
}
DateTime startdate=Convert.ToDateTime(s);
DateTime enddate=Convert.ToDateTime(b);
日期时间解析日期;
List minDate=新列表();
List maxDate=新列表();
列表开始=新列表();
列表结尾=新列表();
开始。添加(开始日期);
parseDate=startdate.AddMonths(1);
while(parseDate.Day!=1)
parseDate=parseDate.AddDays(-1);
parseDate=parseDate.AddDays(-1);
添加(解析日期);
while(parseDate
首先创建数据类型对象的SSIS变量“objListOfMinDates”。然后,在脚本任务编辑器中右键单击脚本任务时,选择变量User::objListOfMinDates。它将在用户变量部分下。然后,在脚本任务中,只需创建并使用局部变量“localListOfMinDates”。最后,在脚本末尾,只需将如下内容分配给“objListOfMinDates”:

Dts.Variables["User::objListOfMinDates"].Value = localListOfMinDates;
之后,您将能够在脚本任务之外的foreach循环中使用该变量。显然,您可以对两个变量(min和max)执行此操作。只需创建这两个,选择这两个作为readWrite,并在脚本任务中分配

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

    Dts.Variables[“User::minList”]。Value=new List()
    
    Dts.Variables[“User::minList”]。Value=new List()

  • 通过执行以下操作,可以为变量创建更易于管理的变量名:

    List minDateList=(List)Dts.Variables[“User::minList”].Value

  • 最后,可以使用list的add方法将这些值添加到list对象中。我会将它们添加到从
    reader.Read()
    读取的循环中

  • 在Foreach循环编辑器中,然后选择Foreach From Variable Enumerator和一个列表变量。


  • 但是我有两个列表,里面有数据?我需要两个数据值?然后使用一个对象列表,如本文所示:我不太擅长C#,但二维列表看起来像是一个正确的方法。但是,如果我们从我的例子出发,我该如何写呢?我应该如何使列表正确,并将2个值分配给列表?如何添加您所说的值?我只能循环通过一个变量,我该怎么做,其他变量呢?我需要这两个值。如果我使用步骤4 List minDateList=(List)Dts.Variables[“User::minlist”].Value;-我收到此错误:无法将“System.object”类型的对象强制转换为“System.Collections.Generic.List`1[System.DateTime]”类型。我已修复此错误,这是我的错误!但是我们如何将这两个列表中的值都放到我的循环中,以便我可以将这两个值都赋给foeachloop中的变量呢?对不起,步骤4包含一个错误。我错误地在那里有一个列表。查看多维对象。看见