Récupérer l'ID après un insert

Résolu
equinoxe83 Messages postés 240 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 18 février 2011 - 18 juil. 2007 à 10:14
equinoxe83 Messages postés 240 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 18 février 2011 - 28 juil. 2007 à 19:00
Bonjour,
J'ai une proc stockée d'insertion. Je souhaite qu'ell retourne la valeur de la clé d'index créé.
J'ai essayé avec return ou output mais lors de la génération de la requête le système n'en veut pas ...
Quelqu'un aurait-il un exemple ?
Merci d'avance.

7 réponses

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
28 juil. 2007 à 17:43
As tu essayé de remplacer CREATE PROC par ALTER PROC
Si la proc est déjà dans le moteur, il faut un alter.

Désolé mais j'utilise CSharp et je ne connais pas le formView,
mais du coup avec un SqlCommand c'est super simple :

De mémoire :

SqlCommand cmd = new SqlCommand("Proc", connexion);
cmd.CommandType = CommandType.storedProcedure;

SqlParameters p = new SqlParameters("@unParam");
p.Direction = Direction.output;
cmd.Parameters.Add(p);

// exécute la cmd

// pour le récupérer :
Int32 ret = Int32.Parse(cmd.Parameters["@unParam"]);

Je pense qu'en VB y'a les mêmes classes genre SqlConnection, SqlCommand, SqlDataReader ect...

A plus.
3
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
18 juil. 2007 à 22:20
-- un insert
insert into table values(v1, v2)

-- le retour avec select
select @@identity as 'RETURN_VALUE'

-- ou avec return
return @@identity
0
equinoxe83 Messages postés 240 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 18 février 2011
27 juil. 2007 à 10:34
Bonjour Yann,
Désolé pour le délai, il m'a fallu faire une pause dans mon développement ...
Merci pour ta réponse!
C'est effectivement ce qu'il m'avait semblé mais peux-tu m'indiquer comment je peux réaliser ce select ou le return ?
En effet, je suis débutant et ne comprend pas ou placer ces instructions.
J'ai bien tenté d'utiliser le return en fin de ma procédure d'insertion mais il n'en veut pas. Il me dit que la procédure stockée n'a pas été créée.
j'utiliser :
INSERT INTO table ...
VALUES ...
RETURN @@identity
Si j'enlève le return, il l'accepte.
Pour le select,  je ne peux pas l'inclure en fin de requ^te me semble-t-il. Si ?
(Comme tu vois, j'en suis au début ...)
Merci de ton aide.
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
27 juil. 2007 à 21:53
Salut,

USE maBase
GO

CREATE PROCEDURE maProc
   @unParam int output
AS
BEGIN

   DECLARE @unRetourSelect int

   INSERT INTO maTable(champ1, champ2)
   VALUES(val1, val2)   

   IF( @@rowcount > 0 AND @@error <> 0  )
   BEGIN
      
      -- avec output
      SET @unParam = @@identity

      -- OU avec select
      SET @unRetourSelect = @@identity
      SELECT @unRetourSelect as 'RETURN_VALUE'

   END
   ELSE
   BEGIN
      -- erreur avec output
      SET @unParam = -1

      -- OU erreur avec select
      SELECT -1 as 'RETURN_VALUE'
   END

END

Bon courage !
0

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

Posez votre question
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
27 juil. 2007 à 21:56
Je rectifie le @@error, il faut qu'il soit = à 0

 IF( @@rowcount > 0 AND @@error = 0  )

@@rowcount doit etre à 1 après un insert et
@@error à 0

Ceci pour etre sur que l'INSERT n'a pas échoué.
0
equinoxe83 Messages postés 240 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 18 février 2011
28 juil. 2007 à 09:19
Bonjour Yann et Merci pour la proc !
J'avais déjà tenter une telle approche mais le Pb c'est que dès que j'essaie de modifier la proc proposée par le générateur (de VWD), il aboie (impossible de l'analyser).
J'avais mis celà sur le compte de mon inexpérience mais en plaçant la tienne (modifiée pour mes besoins, bein entendu), c'est ma même chose.
Est-ce normal ? dois-je passer outre ??
Sinon, dès que j'aura réglé ce Pb, comment je fais pour exploiter la valeur retournée (en VB). Pour exposer le contacte, je réalise l'insert à partir d'un formview et j'imagine que c'est dans l'évènement itemInserted que je pourrai récupérer cette valeur. Je me trompe ?
J'ai vu un post qui évoquait l'ajout d'un param à un objet dataset. C'est par là que je récupère mon ID ??
Soit dit en passant, je trouve curieux que MS n'ai pas prévu plus de doc sur ce point qui me semble pourtant essentiel ...
En tout cas, merci pour ton aide précieuse !

 
0
equinoxe83 Messages postés 240 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 18 février 2011
28 juil. 2007 à 19:00
Merci pour ton aide Yann ... et ta patience !!
Pour la proc, il suffisait de l'ouvrir directement (sans passer par le générateur de requêtes) pour y inclure les éléments que tu m'as transmis.
Pour la récupération de l'ID, pas de Pb pour le C#! Je vois l'a construction et vait m'en inspirer sur mon objectdatasource.
Je posterai un dernier message pour donner la traduc en VB.
Encore merci pour ton assistance !!!!
@+
Frédéric
PS : Pour mémo, les Formview sont utilisabales en Vb et C#. Pas mal du tout ... pour des débutants comme moi (hi,hi)!
Bye
0
Rejoignez-nous