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

equinoxe83 240 Messages postés lundi 18 juin 2007Date d'inscription 18 février 2011 Dernière intervention - 18 juil. 2007 à 10:14 - Dernière réponse : equinoxe83 240 Messages postés lundi 18 juin 2007Date d'inscription 18 février 2011 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
yann_lo_san 1137 Messages postés lundi 17 novembre 2003Date d'inscription 23 janvier 2016 Dernière intervention - 28 juil. 2007 à 17:43
3
Merci
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.

Merci yann_lo_san 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 74 internautes ce mois-ci

Commenter la réponse de yann_lo_san
yann_lo_san 1137 Messages postés lundi 17 novembre 2003Date d'inscription 23 janvier 2016 Dernière intervention - 18 juil. 2007 à 22:20
0
Merci
-- un insert
insert into table values(v1, v2)

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

-- ou avec return
return @@identity
Commenter la réponse de yann_lo_san
equinoxe83 240 Messages postés lundi 18 juin 2007Date d'inscription 18 février 2011 Dernière intervention - 27 juil. 2007 à 10:34
0
Merci
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.
Commenter la réponse de equinoxe83
yann_lo_san 1137 Messages postés lundi 17 novembre 2003Date d'inscription 23 janvier 2016 Dernière intervention - 27 juil. 2007 à 21:53
0
Merci
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 !
Commenter la réponse de yann_lo_san
yann_lo_san 1137 Messages postés lundi 17 novembre 2003Date d'inscription 23 janvier 2016 Dernière intervention - 27 juil. 2007 à 21:56
0
Merci
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é.
Commenter la réponse de yann_lo_san
equinoxe83 240 Messages postés lundi 18 juin 2007Date d'inscription 18 février 2011 Dernière intervention - 28 juil. 2007 à 09:19
0
Merci
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 !

 
Commenter la réponse de equinoxe83
equinoxe83 240 Messages postés lundi 18 juin 2007Date d'inscription 18 février 2011 Dernière intervention - 28 juil. 2007 à 19:00
0
Merci
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
Commenter la réponse de equinoxe83

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.