9

I have some code where i wanna end up with 2 lists. Startings and endings.

They contain start date of month and enddate of month.

These 2 lists i wanna put in an object variable so i can use the object in a foreachloop container in ssis,and loop through each row with startofmonth and endofmonthdates (variables: min and max) - But i dont know how to

Here are my codes:

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;

2 Answers 2

13
  1. You need to create a variable that the package can use. In VS2010, you can click on the SSIS->Variables menu option to open the Variables window. Click 'Add New', and add your lists. I'll use the names minList and maxList. Their data types should be 'Object.'
  2. In your script task, you could instantiate these objects as Lists. But first, you need access to them. Open your script task, and add them as ReadWriteVariables. Add checkmarks to each in the Select Variables modal dialog. selectVar
  3. Now that you've added them as ReadWriteVariables, click Edit Script. Add the System.Collections.Generic namespace to use the List data type. Now, instantiate the Lists.

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

  4. You can create more manageable variable names for your variables by doing the following:

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

  5. Finally, you could add these values to the list objects using List's Add method. I would add them inside of the loop where you are reading from reader.Read().

  6. In your Foreach Loop Editor, you would then select the Foreach From Variable Enumerator, and one of your list variables. ForeachLoop

Sign up to request clarification or add additional context in comments.

18 Comments

how do i add the values you say? I can only loop throug one variable, what do i do what the other variable? I need both values.
if i use step number 4 List<DateTime> minDateList = (List<DateTime>)Dts.Variables["User::minlist"].Value; - i get this error: Unable to cast object of type 'System.Object' to type 'System.Collections.Generic.List`1[System.DateTime]'.
i fixed this error, is was my bad! But how do we get the values from both list to my loop so i can assign both values to variables in the foeachloop?
Sorry, step number 4 contained an error. I erroneously had a List<string> in there.
Look into multidimensional objects. See stackoverflow.com/questions/1596530/…
|
0

First create an SSIS variable "objListOfMinDates" of DataType Object. Then, when you right click your script task, on the Script Task Editor, choose that variable User::objListOfMinDates. It will be under the user variables section. Then, in the script task just create and use a local variable "localListOfMinDates". Finally at the end of the script just assign to the "objListOfMinDates" like so:

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

Then you will be able to use the variable in a foreach loop later outside of the script task. Obviously, you can do this for two variables (min and max). Just create both, choose both as readWrite, and assign in the script task.

3 Comments

But i have 2 lists with data in? I need both data values?
Then use a list of objects like in this post: stackoverflow.com/questions/5069282/…
i am not very good at C#, but the two dimension list looks like one approach that would be right. But how would i write it if we go out from my example? i how should i make the list right and assign the 2 values to the list?

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.