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;
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>();
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;
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()
.
Dans votre éditeur de boucles Foreach, vous sélectionneriez ensuite l'énumérateur Foreach From Variable, et l'une de vos variables de liste.
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.