cs_badrbadr
Messages postés475Date d'inscriptionjeudi 19 juin 2003StatutMembreDernière intervention 3 novembre 2008
-
1 juil. 2006 à 03:17
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014
-
1 juil. 2006 à 12:22
Bonjour,
J'ai une base de donnée dans un serveur MS SQL Express Edition. J'ai aussi une table Members.
Dans ma méthode AddMember, j'utilise une requête de type INSERT pour ajouter de nouveaux membres.
J'aimerais ensuite retrouver l'ID de la dernière ligne insérée (ma table possède une colonne ID qui s'autoincrémente et de type Identity).
J'ai pensé à une requête du genre "SELECT TOP 1 id FROM Members ORDER BY id DESC"
Mais cela fait une requête de plus et par conséquent, dans un environnement multi-thread, entre le moment où un thread 1 insère une nouvelle ligne et retrouve l'id de celle-ci, un thread 2 peut très bien insérer lui aussi une ligne dans la base de données. Je me retrouve donc, du point de vue du thread 1, avec l'id de la ligne insérée par le thread 2.
La classe que j'utilise pour executer ma requete (elle s'appelle SqlManager) est une classe Singleton et Thread-Safe. Lors de l'execution d'une requête, elle bloque les autres threads. Mais je ne peux pas bloquer les autres threads pour deux requêtes consécutifs (à moins que .... je complique un peu le code).
Bon, c'est vrai que c'est un peu extrême comme cas mais j'aimerais savoir s'il n'y a pas des trucs pour régler ce problème.