web-dev-qa-db-fra.com

Variable d'écriture dans l'objet SSIS via la tâche de script

J'ai un code où je veux me retrouver avec 2 listes. Début et fin.

Ils contiennent la date de début du mois et la date de fin du mois.

Ces 2 listes je veux mettre dans une variable d'objet afin que je puisse utiliser l'objet dans un conteneur foreachloop en ssis, et parcourir chaque ligne avec startofmonth et endofmonthdates (variables: min et max)

Voici mes 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;
6
Thomas
  1. Vous devez créer une variable que le package peut utiliser. Dans VS2010, vous pouvez cliquer sur l'option de menu SSIS-> Variables pour ouvrir la fenêtre Variables. Cliquez sur 'Ajouter nouveau' et ajoutez vos listes. Je vais utiliser les noms minList et maxList. Leurs types de données doivent être "Object".
  2. Dans votre tâche de script, vous pouvez instancier ces objets sous forme de listes. Mais d’abord, vous devez y avoir accès. Ouvrez votre tâche de script et ajoutez-les en tant que ReadWriteVariables. Cochez les cases correspondantes dans la boîte de dialogue modale Sélectionner les variables. selectVar
  3. Maintenant que vous les avez ajoutés en tant que ReadWriteVariables, cliquez sur Edit Script. Ajoutez l'espace de noms System.Collections.Generic pour utiliser le type de données List. Instanciez maintenant les listes.

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

  4. Vous pouvez créer des noms de variable plus faciles à gérer pour vos variables en procédant comme suit:

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

  5. Enfin, vous pouvez ajouter ces valeurs aux objets de liste à l'aide de la méthode Add de List. Je les ajouterais à l'intérieur de la boucle où vous lisez reader.Read().

  6. Dans votre éditeur de boucles Foreach, vous sélectionneriez ensuite l'énumérateur Foreach From Variable, et l'une de vos variables de liste. ForeachLoop

8
sorrell

Commencez par créer une variable SSIS "objListOfMinDates" de l'objet DataType. Ensuite, lorsque vous cliquez avec le bouton droit sur votre tâche de script, dans l'éditeur de tâche de script, choisissez cette variable User :: objListOfMinDates. Ce sera sous la section variables utilisateur. Ensuite, dans la tâche de script, créez et utilisez une variable locale "localListOfMinDates". Enfin, à la fin du script, assignez simplement "objListOfMinDates" comme ceci: 

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

Ensuite, vous pourrez utiliser la variable dans une boucle foreach ultérieurement en dehors de la tâche de script. Évidemment, vous pouvez le faire pour deux variables (min et max). Créez simplement les deux, choisissez les deux comme readWrite et assignez-les dans la tâche de script. 

0
BBauer42