none
Conflit DateTime Null RRS feed

  • Question

  • Bonjour à tous, je suis entrain d'effectuer un programme qui permet de remplir les champs d'une table, selon un calcul élaboré. Ces champs sont des plages Horaires (Schedule1Start, Schedule1End...) et sont de type DateTime. Le problème, c'est que dans la base données, certains des ces champs sont NULL. Donc lorsque j’extraie ces champs, pour pouvoir les convertir et effectuer mon calcul, il y a conflit avec le champ NULL. J'aimerai avoir comme solution: S'il rencontre NULL dans un champ, il passe au champ suivant. S'ils sont tous NULL aussi, il passe à la ligne suivante dans la table, et continue le calcul. selon cette logique là. Merci d'avance.

    object y8 = (dataTable11.Rows[d]["schedule2EndHour"]);
                                            DateTime sch2end = Convert.ToDateTime(y8);
                                            decimal sch3 = sch2end.Hour + (sch2end.Minute / 60); // Je fais aussi la déclaration pour les 5 autres champs

    if (sch1start.ToString() != "") { SqlCommand cmd1 = new SqlCommand("insert into TcTaskSchedule (Schedule1StartTime, TaskId, Date) select TcMachineUsage.Schedule1StartHour,'" + l + "', TcMachineUsage.Date from TcMachineUsage where MachineUsageID =" + ID_machine, cn8); cmd1.ExecuteNonQuery(); decimal W = HrsUsed - x1; if (W >= 0) { SqlCommand cmd2 = new SqlCommand("insert into TcTaskSchedule (Schedule1EndTime) select TcMachineUsage.Schedule1EndHour from TcMachineUsage where MachineUsageID =" + ID_machine, cn8); cmd2.ExecuteNonQuery(); decimal H = W - y1; if (H >= 0) { sch0 = sch0 + H; DateTime sch1 = Convert.ToDateTime(sch0); SqlCommand cmd3 = new SqlCommand("insert into TcTaskSchedule (Schedule2StartTime, Schedule2EndTime, Schedule3StartTime) select TcMachineUsage.Schedule2StartHour, TcMachineUsage.Schedule2EndHour, TcMachineUsage.Schedule3StartHour from TcMachineUsage where MachineUsageID =" + ID_machine, cn8); cmd3.ExecuteNonQuery(); SqlCommand cmd4 = new SqlCommand("insert into TcTaskSchedule (Schedule3EndTime) values (" + sch1 + ") where MachineUsageID =" + ID_machine, cn8); cmd4.ExecuteNonQuery(); } else { sch3 = sch2 + W; DateTime sch4 = Convert.ToDateTime(sch3); SqlCommand cmd5 = new SqlCommand("insert into TcTaskSchedule (Schedule2StartTime) select TcMachineUsage.Schedule2StartHour from TcMachineUsage where MachineUsageID =" + ID_machine, cn8); cmd5.ExecuteNonQuery(); SqlCommand cmd6 = new SqlCommand("insert into TcTaskSchedule (Schedule3EndTime) values (" + sch4 + ") where MachineUsageID =" + ID_machine, cn8); cmd6.ExecuteNonQuery(); } } else { sch6 = sch5 + HrsUsed; SqlCommand cmd7 = new SqlCommand("insert into TcTaskSchedule (Schedule1EndTime) values (" + sch6 + ") where MachineUsageID =" + ID_machine, cn8); cmd7.ExecuteNonQuery(); } } else { if (sch2start.ToString() != "") { if ((HrsUsed - y1) >= 0) { sch9 = sch9 + (HrsUsed - y1); SqlCommand cmd8 = new SqlCommand("insert into TcTaskSchedule (Schedule2StartTime, Schedule2EndTime, Schedule3StartTime,TaskId, Date)) select TcMachineUsage.Schedule2StartHour, TcMachineUsage.Schedule2EndHour, TcMachineUsage.Schedule3StartHour, '" + l + "', TcMachineUsage.Date from TcMachineUsage where MachineUsageID =" + ID_machine, cn8); cmd8.ExecuteNonQuery(); SqlCommand cmd9 = new SqlCommand("insert into TcTaskSchedule (Schedule3EndTime) values (" + sch9 + ") where MachineUsageID =" + ID_machine, cn8); cmd9.ExecuteNonQuery(); } else { sch3 = sch3 + HrsUsed; SqlCommand cmd10 = new SqlCommand("insert into TcTaskSchedule (Schedule2StartTime) select TcMachineUSage.Schedule2StartHour from TcMachineUSage where MachineUsageID =" + ID_machine, cn8); cmd10.ExecuteNonQuery(); SqlCommand cmd11 = new SqlCommand("insert into TcTaskSchedule (Schedule2EndTime) values (" + sch3 + ") where MachineUsageID =" + ID_machine, cn8); cmd11.ExecuteNonQuery(); } } else { sch9 = sch9 + (HrsUsed - z1); SqlCommand cmd12 = new SqlCommand("insert into TcTaskSchedule (Schedule3StartTime) select TcMachineUsage.Schedule3StartHour from TcMachineUsage where MachineUsageID =" + ID_machine, cn8); cmd12.ExecuteNonQuery(); SqlCommand cmd13 = new SqlCommand("insert into TcTaskSchedule (Schedule2EndTime) values (" + sch9 + ") where MachineUsageID =" + ID_machine, cn8); cmd13.ExecuteNonQuery(); } } } } else { HrsUsed = HrsUsed + HrsRemain; SqlCommand cmd14 = new SqlCommand("insert into TcTaskSchedule (TaskId, Date, Schedule1startTime, Schedule1EndTime, Schedule2startTime, Schedule2EndTime, Schedule3StartTime, Schedule3EndTime) select '" + l + "',TcMachineUsage.Date, TcMachineUsage.Schedule1startHour, TcMachineUsage.Schedule1EndHour, TcMachineUsage.Schedule2startHour, TcMachineUsage.Schedule2EndHour, TcMachineUsage.Schedule3StartHour, TcMachineUsage.Schedule3EndHour from TcMachineUsage where MachineUsageID =" + ID_machine, cn8); cmd14.ExecuteNonQuery(); SqlCommand cmd15 = new SqlCommand("insert into TcTaskSchedule (HoursUsedByScheduling) select (HoursUsedByScheduler) from TcMachineUsage where MachineUsageID =" + ID_machine, cn8); cmd15.ExecuteNonQuery();

    }


    jeudi 8 novembre 2012 15:31

Réponses

  • L'idée reste la même : pour ne pas faire le calcul sur un champ à la valeur NULL, tester sa valeur au préalable :

    if(dataTable11.Rows[d]["schedule1Start"] != System.DbNull.Value)
    {
        //Faite le calcul sur schedule1Start
    }
    
    if(dataTable11.Rows[d]["schedule2End"] != System.DbNull.Value)
    {
        //Faite le calcul sur schedule2End
    }
    ...
    ...

    Cordialement.

    • Marqué comme réponse geniusben47 jeudi 8 novembre 2012 19:51
    jeudi 8 novembre 2012 16:38
    Auteur de réponse

Toutes les réponses

  • Bonjour,

    En supposant que le code fourni est le corps d'une boucle faite sur dataTable11.Rows

    l'action suivant pourrai vous aider

    Modifier votre code de la façon suivante

    object y8 = (dataTable11.Rows[d]["schedule2EndHour"]); if(y8 == System.DBNull.Value) { continue; } DateTime sch2end = Convert.ToDateTime(y8); decimal sch3 = sch2end.Hour + (sch2end.Minute / 60); // Je fais aussi la déclaration pour les 5 autres champs if (sch1start.ToString() != "") {

    ..........

    Pour plus d'information : http://msdn.microsoft.com/fr-fr/library/system.dbnull.aspx

    Je n'ai pas bien compris ce que vous voulez dire par passer au champs suivant, pour moi du moment où vous ne pouvez pas faire votre caclul vous devez passer à la ligne suivante.

    Cordialement.

    jeudi 8 novembre 2012 15:55
    Auteur de réponse
  • Moi, j'ai six champs pour les plages horaires. Schedule1Start, Schedule1End, Schedule2Start, Schedule2End, Schedule3Start, Schedule3End.

    Si je trouve par exemple, schedule2start = NULL, je passe au champ suivant, càd, schedule2end, ainsi de suite. Puis à la fin, je passe à la ligne suivante continuer mon calcul.

    jeudi 8 novembre 2012 16:04
  • L'idée reste la même : pour ne pas faire le calcul sur un champ à la valeur NULL, tester sa valeur au préalable :

    if(dataTable11.Rows[d]["schedule1Start"] != System.DbNull.Value)
    {
        //Faite le calcul sur schedule1Start
    }
    
    if(dataTable11.Rows[d]["schedule2End"] != System.DbNull.Value)
    {
        //Faite le calcul sur schedule2End
    }
    ...
    ...

    Cordialement.

    • Marqué comme réponse geniusben47 jeudi 8 novembre 2012 19:51
    jeudi 8 novembre 2012 16:38
    Auteur de réponse
  • Merci beaucoup, ça a marché :)
    jeudi 8 novembre 2012 19:51