Récupere la clé primaire apres insertion

Fermé
lg022 Messages postés 21 Date d'inscription jeudi 24 avril 2008 Statut Membre Dernière intervention 28 juillet 2008 - 2 juin 2008 à 09:29
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 - 9 mai 2014 à 12:49
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

lg022 Messages postés 21 Date d'inscription jeudi 24 avril 2008 Statut Membre Dernière intervention 28 juillet 2008
2 juin 2008 à 13:45
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
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
2 juin 2008 à 16:09
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
0
cs_gabj Messages postés 58 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 5 août 2009
2 juin 2008 à 16:17
Sinon au lieu d'utiliser des numéros auto, utilises des GUID pour tes identifiants (uniqueidentifier sous SqlServer)

JayJay974
0
lg022 Messages postés 21 Date d'inscription jeudi 24 avril 2008 Statut Membre Dernière intervention 28 juillet 2008
2 juin 2008 à 16:23
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?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_gabj Messages postés 58 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 5 août 2009
2 juin 2008 à 17:27
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
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
2 juin 2008 à 18:43
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#
0
lg022 Messages postés 21 Date d'inscription jeudi 24 avril 2008 Statut Membre Dernière intervention 28 juillet 2008
2 juin 2008 à 20:48
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
0
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
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
9 mai 2014 à 12:49
@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.

0
Rejoignez-nous