IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Contrôler l’incrémentation des numéros de séquences en C#


Sujet :

C#

  1. #1
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Janvier 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2010
    Messages : 119
    Points : 77
    Points
    77
    Par défaut Contrôler l’incrémentation des numéros de séquences en C#
    Salut à tous,
    j'ai une table avec une colonne numsequence possédant les valeurs 00001, 00002, 00003, 00004 , 00005, etc.... Ces données sont récupérées à partir d'un fichier .txt formaté manuellement.
    Il arrive des fois ou les utilisateurs omettent certaines valeurs. Par exemple : 00001, 00002, 00004, 00005 , 00006. je veux m'assurer que la valeur n+1 est bien incrémentée à 1 dans le cas contraire afficher un message d'erreur.

    Mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    //*************************************************************************************************************************
                      //Controle du numero de sequence
                      string requete_cptsequence = "select numsequence from matable ";
                      OleDbDataReader lire_cptsequence = cls.ouvrirRequète(requete_cptsequence, maconnexion);
                      List<string> result = new List<string>();
                      try
                      {
                          while (lire_cptsequence.Read())
                          {
                              result.Add(lire_cptsequence.GetString(0));
                              string[] tabseq = result.ToArray();
     
     
                              int cpttab = tabseq.Length; //recuperation de la longeur du tableau pour le traitement dans les boucles for
     
                              for (int i = 1; i < cpttab ; i++) // La première boucle commence à partir de la valeur i=1 c'est à dire 00001
                              {
     
                                  for (int y = 2; y < cpttab; y++) // La deuxième boucle commence à partir de la valeur y=2 c'est à dire 00002
                                  {
     
                                       int ti = Convert.ToInt16( tabseq[i]); // Je recupere la premiere valeur 00001 que je met dans la variable ti
                                       int ty = Convert.ToInt16(tabseq[y]);  // Je recupere la premiere valeur 00002 que je met dans la variable ty
                                       int somme = ty - 1;                   //La variable somme va recevoir 00001 - 00002 = 00001. Le resultat doit etre egale à la valeur de ti pour que je passe à la ligne suivante
     
                                      if ( somme != ti )
                                      {
                                          string[] linecptseq = { "Saut de numeros de sequence " + " " + tabseq[y] + " " };
                                          System.IO.File.AppendAllLines(Application.StartupPath + "\\erreur_confrere.txt", linecptseq);
     
                                      }
                                      y = y + 1;
                                  }
                                  i = i + 1;
                              }
     
                          } 
     
                      }
                      catch (Exception ex)
                      {
                          MessageBox.Show(ex.Message);
                      }
    Le premier test se fait avec les valeurs biens ordonnées (00001,00002,00003,00004,00005) et j'obtiens le résultat suivant : Le deuxième test se fait avec les valeurs 00001,00002,00004,00005,00006 et j'obtiens le résultat suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    00004,00004,00004,00004,00006,00004
    .

    je sollicite votre aide.

  2. #2
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 170
    Points : 7 422
    Points
    7 422
    Billets dans le blog
    1
    Par défaut
    Euh...

    Et au lieu d'écrire une usine à gaz (car pour le coup, j'ai mais vu un truc aussi mal écrit/pensé), si tu faisais ce contrôle directement en SQL ?

    Ça serait plus rapide, plus propre, plus robuste.

  3. #3
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Janvier 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2010
    Messages : 119
    Points : 77
    Points
    77
    Par défaut
    StringBuilder j'ai pensé à faire le contrôle dans une requête sql mais je ne vois pas comment la formuler. Voilà pourquoi je passe par le code présent. Tu veux bien me donner un exemple de requête qui va dans ce sens ?

  4. #4
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Janvier 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2010
    Messages : 119
    Points : 77
    Points
    77
    Par défaut
    Je viens d’implémenter une autre idée qui marche bien et je procède de la manière suivante :
    - je crée un champs ID auto incrément dans ma table.
    - je supprime le champs id de la table,
    - je recrée un autre,
    - je l'ai fait démarrer de 1 avec un pas de 1
    - Enfin je fais le contrôle sur le champs ID et le champs numsequence

  5. #5
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 170
    Points : 7 422
    Points
    7 422
    Billets dans le blog
    1
    Par défaut
    Mon Dieu...

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select count(*) - 1
    from seq s1
    left outer join seq s2 on cast(s2.numseq as int) = cast(s1.numseq as int) + 1
    where s2.numseq is null;

    Cette requête retourne le nombre de trous qu'il y a entre le plus petit numseq et le plus grand.

  6. #6
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Janvier 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2010
    Messages : 119
    Points : 77
    Points
    77
    Par défaut
    StringBuilder, l’exécution de cette requête me donne le message d'erreur ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT count(*) - 1
    FROM virement  s1
    LEFT OUTER JOIN virement s2 ON cast(s2.numsequence AS int) = cast(s1.numsequence AS int) + 1
    WHERE s2.numsequence IS NULL;
    Erreur de syntaxe (Opérateur absent) dans l'expression "cast(s2.numsequence AS int) = cast(s1.numsequence AS int) +"

  7. #7
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 170
    Points : 7 422
    Points
    7 422
    Billets dans le blog
    1
    Par défaut
    Normal, je sais pas quel est ton SGBD.

    Il faut adapter un peu le cast.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ne pas afficher des numéros de pages
    Par Eric06 dans le forum Mise en forme
    Réponses: 2
    Dernier message: 18/12/2006, 23h35
  2. Etat : j'obtiens des numéros et non des données
    Par delnosio dans le forum IHM
    Réponses: 4
    Dernier message: 07/08/2006, 14h26
  3. Arrêt des numéros de pages
    Par Aline2611 dans le forum Mise en forme
    Réponses: 3
    Dernier message: 11/07/2006, 16h20
  4. Controle des numéros utilisés
    Par Microquant dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/09/2005, 17h54
  5. Calcul des numéros de semaine d'un calendrier
    Par Invité dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 06/11/2002, 21h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo