2 votes

Existe-t-il un moyen de vérifier si un numéro généré au hasard existe dans la base de données ? C#

J'ai cette génération automatique de numéros LRN composée de 12 numéros seulement. D'abord, j'ai défini "numéro" = 100000000000 + numéros aléatoires, donc exemple de sortie 100569815234, puis ce numéro sera vérifié s'il existe déjà dans ma base de données, sinon ce numéro sera utilisé pour enregistrer un étudiant. Mais s'il existe déjà dans la base de données, j'ai cette autre génération de numéros aléatoires comme le premier numéro aléatoire, mais comment puis-je vérifier à nouveau s'il existe déjà dans la base de données ?

Voici mon code

dans form2_load*

        Random rnd = new Random(); //
        long firstLRN = rnd.Next(1000000000);
        long addLRN = 100000000000 + firstLRN;
        string FinalLRN = Convert.ToString(addLRN);

        try
        {
            connection.Open();
            OleDbCommand command = new OleDbCommand();
            command.Connection = connection;
            command.CommandText = "select LRN FROM Student_LRN where LRN = '" + FinalLRN + "'";

            OleDbDataReader reader = command.ExecuteReader();

            int countLRN = 0;
            while (reader.Read())
            {
                countLRN++;

            }
            if (countLRN == 0)
            {
                label_LRN.Text = FinalLRN;
            }
            else if (countLRN == 1)
            {
                long randomNewLRN = rnd.Next(1000000000);
                long newLRN = 100000000000 + randomNewLRN;
                string newFinalLRN = Convert.ToString(newLRN);
                label_LRN.Text = newFinalLRN;
                /*
                 * what if this another random generated number already existing again? what can i do with this?
                 */
            }

        }
        catch (Exception ex)
        {
            MessageBox.Show("Error" + ex);
        }
        finally
        {
            connection.Close();
        }

1voto

Windgate Points 326

Il se peut que vous deviez faire plus d'une requête si le nombre existe, de toute façon avec des valeurs aussi élevées, il faudrait le résoudre en quelques étapes (1 ou 2) avec quelque chose comme ce code

Random rnd = new Random();
long firstLRN;
long addLRN;
string FinalLRN;

try
{
    // Set connection
    connection.Open();
    OleDbCommand command = new OleDbCommand();
    command.Connection = connection;

    // Generate the first random number
    firstLRN = rnd.Next(1000000000);
    addLRN = 100000000000 + firstLRN;
    FinalLRN = Convert.ToString(addLRN);

    // Query and if exists query with number++
    do {
        command.CommandText = "select LRN FROM Student_LRN where LRN = '" + FinalLRN + "'";

        // Execute the query and check if the number exists
        OleDbDataReader reader = command.ExecuteReader();

        // If number exists add 1 to the number
        if (reader.Read()){
            addLRN++;
            FinalLRN = Convert.ToString(addLRN);
        }
        else {
            break;
        }
    }

}
catch (Exception ex)
{
    MessageBox.Show("Error" + ex);
}
finally
{
    connection.Close();
}

0voto

Owen Pauling Points 222

Extrayez votre logique "vérifier si elle existe déjà" dans une méthode que vous pouvez appeler chaque fois que nécessaire. Elle peut prendre l'ID comme paramètre et retourner un bool, par exemple.

0voto

Cid Points 8773

Si vous souhaitez utiliser ce numéro unique pour l'enregistrement d'un utilisateur, je n'utiliserais pas une valeur numérique, mais plutôt une valeur NewGuid :

// using System;

Guid LRN = Guid.NewGuid();
Console.WriteLine(LRN);

Cela donne quelque chose comme :

df7df6cf-59b5-4bfb-87de-0d1e00c003a8

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X