Création d'identifiant et concurrence

yamzy2 Messages postés 1 Date d'inscription mardi 14 juin 2005 Statut Membre Dernière intervention 14 juin 2005 - 14 juin 2005 à 17:07
loicmichel Messages postés 6 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 19 novembre 2007 - 28 oct. 2007 à 08:08
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

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
14 juin 2005 à 20:14
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.
0
loicmichel Messages postés 6 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 19 novembre 2007
28 oct. 2007 à 08:08
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
0
Rejoignez-nous