Tableadapter méthode insert et @@identity

Signaler
Messages postés
7
Date d'inscription
lundi 18 février 2008
Statut
Membre
Dernière intervention
14 novembre 2008
-
Messages postés
1
Date d'inscription
mercredi 4 février 2009
Statut
Membre
Dernière intervention
4 février 2009
-
bonjour
j'utilise la méthode insert généré automatiquement par mon tableapdapter
j'ai modifié l'insertcommand afin d'y ajouter
select @@identity
chose classique que de récupérer l'id de l'enregistrement inséré
malheureusement la méthode insert me renvoit le nombre de ligne insérée malgré mon select à l'intérieur de la commande
que faire ?
Merci

3 réponses

Messages postés
240
Date d'inscription
lundi 18 juin 2007
Statut
Membre
Dernière intervention
18 février 2011

Bonjour à toi,
Excellente question !!!
J'ai moi aussi posé la même question mais n'ai pas trouvé d'autre solution que de créer une requète sql d'insert avec retour du @@identity.
Après l'insert, je récupère la valeur au travers de l'évènement inserted du datasource.
Comme ceci :




Sub

ReservationByCodeDS_Inserted(


ByVal

sender


As





Object

,


ByVal

e


As

ObjectDataSourceStatusEventArgs)


Handles

ReservationByCodeDS.Inserted



CodeResaTB.Text = e.OutputParameters("codeEnretour")


end sub 

Ici, codeResaTB est un texbox de la page utilisé par le Datasource pour afficher le formview
codeEnretour est le code retoruné par la procédure stockée.

C'est un peu tiré par les cheveux mais je n'ai pas trouvé de piste sur le Pb que tu évoque (mais si tu trouves, n'hésites pas ...)
@+
Messages postés
7
Date d'inscription
lundi 18 février 2008
Statut
Membre
Dernière intervention
14 novembre 2008

Salut,

J'ai finalement opté pour la procédure stockée d'insertion qui renvoit @@IDENTITY

J'ai surchargé la méthode Inserted de mon objectdatasource de la manière suivante

ProtectedSub odsActe_Inserted(ByVal sender AsObject, ByVal e As System.Web.UI.WebControls.ObjectDataSourceStatusEventArgs) Handles odsActe.Inserted

   Response.Redirect(String.Format("~/02/GestionActe.aspx?Id={0}", CInt(e.ReturnValue)))

EndSub

Ca marche bien, ce n'est pas idéal mais ça marche

Michel
Messages postés
1
Date d'inscription
mercredi 4 février 2009
Statut
Membre
Dernière intervention
4 février 2009

Salut Michel,

Tu peux utiliser la méthode insert de ton tableAdapter et récupérer l'incrément.
Après avoir rajouter le "select @@identity" à la fin de ta commande dans ton tableAdapter manager. Il suffit de  modifier la propriété "ExexuteMode" de ta query. il faut mettre cette propriété à "scalar".
Après la méthode insert ne retournera plus le nombre de lignes mais l'id du dernier insert.
-> ne pas oublier de caster cet id en decimal.

cf: http://www.shiningstar.net/ASPNet_Articles/DataSet/DataSetProject7.aspx