Récupere la clé primaire apres insertion [Fermé]

Signaler
Messages postés
21
Date d'inscription
jeudi 24 avril 2008
Statut
Membre
Dernière intervention
28 juillet 2008
-
Messages postés
28141
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 avril 2020
-
Bonjour à tous
voila j'essaye depuis hier après midi de récupérer la clé primaire d'un formview après insertion
dans mon formview page 1.aspx j'ai une clé se nommant "Id_P" en compteur de1 à 1 (je travaille sous SQL 2000)
et j'aimerais récupérer cette valeur dans un autre champ se situant dans une autre page2.aspx (car je travaille sur des pages web)

dans la page1 la clé est cachée mais lors de l'insertion vers ma base de données elle s'est incrémentée

J'espere avoir été assez explicite dans mon probleme, n'hesitez pas pour d'eventuelle question
Merci

9 réponses

Messages postés
21
Date d'inscription
jeudi 24 avril 2008
Statut
Membre
Dernière intervention
28 juillet 2008

Personne a une idée ca m'embete d'est super important j'ai lu un fichier sur comment récuperer la clé primaire de Magali mais je n'y arrive pas
1.                'Pour récupérer l'identifiant d'un nouvel enregistrement et être sûr que ce soit bien l' enregistrement qui nous interesse, rien de mieux qu'une procédure stockée. <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

2.                 

3.                 

4.                'Nous vous proposons ici une méthode simple qui ne nécessite pas de de==procédure stockée et qui évite de faire un select avec l'ensemble des données que l'on vient d'insérer dans la base de données.

5.                 

6.                 

7.                'Cette méthode utilise @@IDENTITY et consiste à exécuter la requête INSERT suivie d'une requête SELECT @@IDENTITY dans le même recordset.

8.                 

9.                 

10.            'Voici la requête :

11.             

12.            "INSERT INTO Table ( Champ(s) ) VALUES ( valeur(s) ); SELECT @@IDENTITY as ID"

13.             

14.             

15.            'Vous trouverez ci-dessous un exemple en ASP utilisant la récupération de l'ID :

16.             

17.             
18.            'Dans cet exemple, on insere la valeur "test" dans le champ Test de <?xml:namespace prefix st1 ns "urn:schemas-microsoft-com:office:smarttags" /??><st1:personname w:st="on" productid="la Table Test">la Table Test</st1:personname> ayant comme clé primaire le champ ID.

19.             

20.             

21.             

22.            SQL="INSERT INTO Test (Test) VALUES ('test'); SELECT @@IDENTITY as ID"

23.             

24.            ...

25.             

26.            Set rs = MyCon.Execute(SQL,,1)   '=> les requêtes seront exécutée telle quelles sont données l'une après l'autre

27.             

28.            Set rs= rs.NextRecordset      '=> la données retournée par la deuxième requête (le deuxième recordset) sera l'identifiant

29.             

30.            ...            '=> de l'enregistrement inséré par la première requête.

31.             

32.            ID=rs("ID")

33.             

34.             

35.            '-------------------------------------

36.             

37.            la commande Execute a trois arguments parfois optionnel :

38.             

39.            Execute(SQL, Paramètres, Options )

40.             

41.            '=> SQL : la variable contenant les requêtes à exécuter

42.             

43.            '=> Paramètres : (optionnel) tableau contenant les paramètres de(s) requête(s).

44.             

45.            '=> Options : défini comment doit être interprété la commande execute.

46.             

47.             

48.            'Options peut prendre entre autres les valeurs :

49.             

50.            '-1    <=>    adCmdUnspecified    => le type n'est pas spécifié

51.             

52.            '1    <=>    adCmdText   => type texte : SQL sera évalué comme tel

53.             

54.            '2   <=>   adCmdTable   => SQL sera évalué comme un nom de table et la valeur de chaque champ sera retournée.

55.             

56.            '4   <=>   adCmdStoredProc   => SQL sera évalué comme le nom d'une procédure stockée

57.             

58.            '8   <=>   adCmdUnknown   => valeur par défaut : type inconnu

59.             

60.            '256   <=>   adCmdFile   => SQL sera évalué comme étant un nom de fichier

61.             

62.            '512   <=>   adCmdTableDirect   => SQL sera évalué comme un nom de table

63.             

64.             

65.            ....

66.             

67.            '-------------------------------------

68.             

69.              

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

C'est quoi ce micmac tu as du code ASP.NET (forview)et ASP(set, NextRecordset)

Pour info voici une méthode
sql "INSERT .....;SET @iD SCOPE_IDENTITY()"

  System.Data.SqlClient.SqlParameter parameterKey = new System.Data.SqlClient.SqlParameter();
       try{
  
cmd = ...
                cmd.CommandText = sql;
                parameterKey.DbType = DbType.Int64; //long
                parameterKey.ParameterName = "@iD";
                parameterKey.Direction = ParameterDirection.Output;
                cmd.Command.Parameters.Add(parameterKey );
                cmd.ExecuteNonQuery();
}

            catch (Exception e)
            {
.....
            }
            finally
            {
                if (cmd != null)
                {
                    cmd.Close();
                }
            }
            long key  = (long)parameterKey.Value;

Les parametres en output ne sont renseignés qu'apres fermeture de la commande.

Bon coding
Messages postés
58
Date d'inscription
jeudi 16 septembre 2004
Statut
Membre
Dernière intervention
5 août 2009

Sinon au lieu d'utiliser des numéros auto, utilises des GUID pour tes identifiants (uniqueidentifier sous SqlServer)

JayJay974
Messages postés
21
Date d'inscription
jeudi 24 avril 2008
Statut
Membre
Dernière intervention
28 juillet 2008

Merci a tous les 2 pour vos réponses
"Nhervagault" ce n'est pas un micmac je suis en train de créer des formulaires sur des pages web

je ne vois pas ou je dois mettre ton code (sorry) peux tu m'en dire un petit pêu plus? car en code je commence seulement
(j'avais deja vu ce code mais ne sachant ou le mettre je me suis permise de vous contacter)

"gabj" sous sqlServer 2000 j'ai appris que ce n'etait pas le meilleur choix pour une clé primaire non?
Messages postés
58
Date d'inscription
jeudi 16 septembre 2004
Statut
Membre
Dernière intervention
5 août 2009

Tous dépends de ce que tu estimes être un meilleur choix. Tu peux générer ton GUID à partir de ton code C# puis le réutiliser comme identifiant de ton entité en cours. Effectivement le GUID est plutot lourd car il représente une données SQL Server dès plus grandes (ce qui le rend plus lent que les int pour la recherche sur un champs indéxé). Mais si tu as besoin de consolider plusieurs tables à partir d'un datawarehouse, il est complètement adéquat. Les GUID sont également utilisés nativement pour identifier les lignes d'une table lors de réplications.

Donc à toi de choisir.

JayJay974
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
25
Le probleme est que tu programmes en ado sur la plateforme .net,
ce n'est pas conseillé.

Comment rapidement expliquer la bonne methode.

C'est pas propre mais mets le code derriere un bouton par exemple.
et tu mets le resultat dans une label

exemple
  long key  = (long)parameterKey.Value;
label1.text = key.ToString();

Regardes le coach asp.net pour voir comment faire, pour l'asp.net.
Mais ne mélange pas asp3 et asp/net

Bon courage

NB : le code mis est dans mon précédent post est en c#
Messages postés
21
Date d'inscription
jeudi 24 avril 2008
Statut
Membre
Dernière intervention
28 juillet 2008

ok je vais essayer ca demain; je suis plus au bureau
c'est ce que je voulais faire le mettre sur le click d'un bouton
je vous dis ca demain

Merci pour tous vos conseils
il existe normalement 3 solutions possible

- L'utilisation de la procédure stockée « SCOPE_IDENTITY »
- L'utilisation de la procédure stockée « IDENT_CURRENT »
- et finalement l'utilisation de la fonction « @@IDENTITY »

pour plus de détail consulter ce vidéo :

https://www.youtube.com/watch?v=38jDrfpZFFk&list=UUfTQQTS4AgU37-P_xnKX-SQ
Messages postés
28141
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 avril 2020
325
@PilotDev.

Bonjour,
Même si ta réponse peu ( peut-être ) intéresser du monde... la question date de 2008 .... et j'espère pour le demandeur qu'il a trouvé une solution à son souci depuis le temps...

Bref.. fin des fouilles archéologiques.. fermeture du sujet.