Partage
  • Partager sur Facebook
  • Partager sur Twitter

Générateur automatique ID en C #

Sujet résolu
    9 avril 2021 à 21:24:37

    Bonjour,

    Je veux créer un générateur automatique comme ceci EAD-minutes-Année-identifiant, j'ai pu avoir ce forme EAD-2021-00001.

    j'ai besoin de vos aide.

    voici mon code .

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Data.SqlClient;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            SqlConnection con = new SqlConnection("Data Source=DESKTOP-F1HOKVA\\SQLSERVER;Initial Catalog=generateur;Integrated Security=True");
            SqlCommand cmd = new SqlCommand();
            SqlDataReader dr;
            public void GenerateID()
            {
                con.Open();
                cmd = new SqlCommand("Select Max(codeDep) from departement", con);
                dr = cmd.ExecuteReader();
                string newId = string.Format("EAD-{0}-0001", DateTime.Now.Year);
                if (dr.HasRows)
                {
                    string prefix = string.Format("EAD-{0}", DateTime.Now.Year);
                    while (dr.Read())
                    {
    
                        string maxId = dr[0].ToString();
                        if (!string.IsNullOrWhiteSpace(maxId) && maxId.StartsWith(prefix))
                        {
                            int count = Convert.ToInt32(maxId.Split()[2]);
                            newId = string.Format("EAD-{0}-{1:0000}", DateTime.Now.Year, count + 1);
                        }
                    }
                }
                txtID.Text = newId;
                con.Close();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                GenerateID();
            }
        }
    }
    



    • Partager sur Facebook
    • Partager sur Twitter
      9 avril 2021 à 21:44:07

      Pourquoi recréer une roue carrée ?

      Pourquoi la génération de simples GUIDs qui n'auront pas tous les inconvénients de votre "roue" ne convient pas ?

      Pourquoi ne pas laisser le SGBDR faire ce travail si c'est pour les mettre dans une base de données ?

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        9 avril 2021 à 22:12:04

        c'est pour un projet qui demande un générateur automatique sur le code.
        • Partager sur Facebook
        • Partager sur Twitter
          10 avril 2021 à 19:47:17

          Et pourquoi ne pas prendre ce qui existe déjà ?
          • Partager sur Facebook
          • Partager sur Twitter
          Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
            12 avril 2021 à 17:32:10

            Si tu veux récupérer le codeDep, ta requête est bonne, mais dans tous les cas tu n'auras qu'une seule valeur si il y en une; donc inutile de se trainer des boucles de lecture.

            et tu fais "beaucoup" de fois la même chose; quitte à faire quelque chose:

            public void GenerateID()
            {
                string prefix = string.Format("EAD-{0}-", DateTime.Now.Year);
                con.Open();
                cmd = new SqlCommand("Select Max(codeDep) from departement", con);
                var oldId=cmd.ExecuteScalar();
                int count= oldID!=Null ? Convert.ToInt32(maxId.Split("-")[2])+1 : 1;
                string newId = prefix + string.Format("{0:0000}", count);
                txtID.Text = newId;
                con.Close();
            }


            Sinon au début tu parles d'un format EAD-Minutes-Année-Identifiant; mais dans ton code, il n'y a que année.

            Ps: j'ai considéré que toutes les entrées de colDep était de la forme EAD-Année-identifiant

            -
            Edité par umfred 12 avril 2021 à 17:34:02

            • Partager sur Facebook
            • Partager sur Twitter
              12 avril 2021 à 20:02:12

              Merci beaucoup pour vous tous de votre aide j'avais déjà résultat le problème .

              public void GenerateID()
                      {
                          con.Open();
                          cmd = new SqlCommand("Select Max(codeDep) from departement", con);
                          dr = cmd.ExecuteReader();
                          string newId = string.Format("AGT{0}0001", DateTime.Now.ToString("syy"));
                          if (dr.HasRows)
                          {
                              string prefix = string.Format("AGT{0}", DateTime.Now.ToString("syy"));
                              while (dr.Read())
                              {
              
                                  string maxId = dr[0].ToString();
                                  if (!string.IsNullOrWhiteSpace(maxId) && maxId.StartsWith(prefix))
                                  {
                                      int count = Convert.ToInt32(maxId.Split('-')[2]);
                                      newId = string.Format("AGT{0}{1:0000}", DateTime.Now.ToString("syy"), count + 1);
                                  }
                              }
                          }
              
                          con.Close();
                          txtID.Text = newId;
                          
                      }
              



              • Partager sur Facebook
              • Partager sur Twitter
                13 avril 2021 à 12:41:10

                un truc pas cohérent, ou alors je passe à côté d'un truc non dit, c'est le split avec '-' alors que dans ton nouvel Id, il n'y a pas ce caractère (et c'était l'inverse dans ton code initial). Peut-être que newId n'a rien à voir (en terme de formatage) avec le champ codeDep du coup
                • Partager sur Facebook
                • Partager sur Twitter

                Générateur automatique ID en C #

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown