Get Last ID

cs_badrbadr Messages postés 475 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 3 novembre 2008 - 1 juil. 2006 à 03:17
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Derniè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.

[:D]
@++

2 réponses

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
1 juil. 2006 à 11:27
à la fin de ta proc, fait return @identity

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
1 juil. 2006 à 12:22
Salut,

Regarde aussi du côté de SCOPE_IDENTITY et IDENT_CURRENT, les 2 fonctions n'ont pas la même portée.
@@IDENTITY
SCOPE_IDENTITY
IDENT_CURRENT

/*
coq
MVP Visual C#
*/
0
Rejoignez-nous