Création d'identifiant et concurrence

Signaler
Messages postés
1
Date d'inscription
mardi 14 juin 2005
Statut
Membre
Dernière intervention
14 juin 2005
-
Messages postés
6
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
19 novembre 2007
-
Bonjour, j'utilise actuellement MSDE
(SQL server) et j'ai besoin de créer un identifiant et de le mettre
dans la base de donnée et dans un cookie. Savez-vous comment faire pour
éviter le phénomène de concurrence ? (entre le INSERT et le SELECT,
voir plus bas)



Pour cela j'ai envisager plusieurs solutions (ai-je la bonne ?)

1) Faire un grand numéro aléatoirement et l'insérer dans la base ainsi que dans le cookie

2) Utiliser des threads ou des sémaphores, et faire en un
bloc : un insert sur la table qui autoincrémente l'identifiant et un
select pour le récupérer et le mettre dans le cookie

3) Trouver un éléments dans dans MSDE qui indique le
nombre de connexion à la base de données ou le nombre de requêtes
effectuées et l'utiliser comme identifiant.

4) Autres réponses ?...







Toute réponse sera la bienvenue.

Yann.

2 réponses

Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
35
Salut,



La solution est les GUID, recherche sur le forum de ce site.

J'en ai deja discuté il y a quelques semaines.





Bon courage.
Messages postés
6
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
19 novembre 2007

J'ai une petite fonction qui peut aider : elle retourne un GUID.

       
//  myConnection  doit etre une connection SQL valide.




public static Guid GetUniqueID()
        {
            string SQLString = "Set @NewGuid=newid()";


            SqlParameter paramCount = new SqlParameter("@NewGuid", SqlDbType.UniqueIdentifier);
            paramCount.Direction = ParameterDirection.Output;


            SqlCommand CommandTest = new SqlCommand(SQLString, myConnection);
            CommandTest.CommandType = CommandType.Text;
            CommandTest.Parameters.Add(paramCount);


            Program.myConnection.Open();
            CommandTest.ExecuteNonQuery();
            Program.myConnection.Close();


            return (Guid) CommandTest.Parameters["@NewGuid"].Value;
          
        }

Loic MICHEL