IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[vb/C#] Récupérer un id apres insertion


Sujet :

Windows Forms

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 12
    Points : 6
    Points
    6
    Par défaut [vb/C#] Récupérer un id apres insertion
    Bonjour

    Voila, je voudrais récupérer l'id auto incrémenté apres une insertion dans une table pour pouvoir remplir une clé étrangère dans une autre table.

    En php, il existe une facon tres simple de le faire, mais je trouve pas son équivalent en .net

    Je voudrais le faire sur une base access (j'utilise du vb.net) et une base SQL serveur (j'utilise du C#)

    J'ai trouvé un message en faisant une recherche, mais j'ai pas trop compris... je suis étudiant, c'est eut etre pour ca

    Merci par avance

  2. #2
    Membre confirmé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Points : 637
    Points
    637
    Par défaut
    dans ta requete faut que tu ajoutes : @nomVariable = @@Identity.
    MCTS Microsoft.
    La conception : Prendre le temps pour gagner du temps.

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Je le met ou ? ca donne koi ? comment je le récupère ? Ca marche avec Access (jet) et sql serveur ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSql = "INSERT INTO Indicateur(IdIndicateur,Libelle,Representation) VALUES (@nomVariable = @@Identity ,'" + Libelle + "','" + IdRepresentation.ToString + "');"
    :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSql = "INSERT INTO Indicateur(@IdIndicateur = @@Identity,Libelle,Representation) VALUES ('' ,'" + Libelle + "','" + IdRepresentation.ToString + "');"
    :

    IdIndicateur est le champ auto incrémenté

  4. #4
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Pour l'instant j'ai fais ca, mais ca manque délégence :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            strSql = "SELECT @@identity FROM Indicateur;"
            ObjetCommand = New OleDbCommand(strSql)
            ObjetDataAdapter = New OleDbDataAdapter(ObjetCommand)
            ObjetCommand.Connection() = ObjetConnection
            ObjetDataAdapter.Fill(ObjetDataSet, "TypeIndicateur")
     
            mySQLDR = ObjetCommand.ExecuteReader
            Dim IdIndication As Integer
     
            mySQLDR.Read()
            IdIndication = mySQLDR.GetValue(0)
            mySQLDR.Close()
    Mais ca marche...



    Si tu peux m'expliquer ton truc...

    merci d'avance

  5. #5
    Membre confirmé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Points : 637
    Points
    637
    Par défaut
    essaye ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SET NOCOUNT ON INSERT INTO table (champs,......) VALUES ('valeurs',.....) SELECT @@IDENTITY AS 'id_table' Set Nocount off
    MCTS Microsoft.
    La conception : Prendre le temps pour gagner du temps.

  6. #6
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

    Informations professionnelles :
    Activité : Freelancer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Points : 2 914
    Points
    2 914
    Par défaut
    sincèrement lorsque j'ai eu besoin de ça je suis passé par le max de mes id.puisque c'est de l'auto-incrémentation donc nécesserement lorsque je récupère le max des ID de matable ça sera la bonne valeur que je cherche, mais je sais qu'il y aurait des moyens plus fiables que ma méthode LooOOOOL
    Mes articles, Mon Blog

    Rubrique Jasper/iReport :
    ------- Forum Jasper --------
    ----- FAQ Jasper/iReport -----


  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 98
    Points : 109
    Points
    109
    Par défaut
    Pareil que JauB, ou bien un LAST_INSERT_ID() en MySQL. Par rapport au MAX(), LAST_INSERT_ID() présente l'avantage de se baser sur ta session, donc selon moi plus fiable que le MAX() qui peut te renvoyer un id qui ne te concerne pas si une autre insertion de la part d'un autre client est faite entre le moment où la requête d'insertion est faite et le moment où tu récupères le MAX(id).
    Après je ne sais pas si cette fonction existe sous ACCESS et SQL.
    ADSC Informatique : Assistance & Dépannage Informatique sur Toulouse et région (www.adscinformatique.fr)

  8. #8
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

    Informations professionnelles :
    Activité : Freelancer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Points : 2 914
    Points
    2 914
    Par défaut
    sinon je te propose autre solution et qui marche très très bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     cn.Open()
     
            oSQL = " INSERT INTO bordereau_versement(Site,Id_User) values ('" & SelectedSite & "','" & ID_USERR & "')" & _
                   " SELECT id_bordereau FROM bordereau_versement WHERE id_bordereau = @@IDENTITY"
            cmd.CommandText = oSQL
            cmd.Connection = cn
            ID_BORD = CStr(cmd.ExecuteScalar)
     
            cn.Close()

    comme ça dans ta variable ID_BORD tu auras le dernier ID inséré
    Bonne chance
    Mes articles, Mon Blog

    Rubrique Jasper/iReport :
    ------- Forum Jasper --------
    ----- FAQ Jasper/iReport -----


  9. #9
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Merci a tous, je vais étudier ca

  10. #10
    Membre confirmé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Points : 637
    Points
    637
    Par défaut
    le 'SET NOCOUNT ON ' te garanti que si plusieurs 'insert' se font en meme temps, de bien recuperer ton id à toi et pas celui d'une autre requete faite un peu apres.
    MCTS Microsoft.
    La conception : Prendre le temps pour gagner du temps.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 40
    Points : 41
    Points
    41
    Par défaut
    et avec Access ?

  12. #12
    Membre régulier Avatar de boulete
    Profil pro
    Inscrit en
    Février 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Février 2006
    Messages : 132
    Points : 106
    Points
    106
    Par défaut
    Avec Access, après avoir exécuté ta requête, tu peux utiliser le last(TonChamp), qui te renvoie le dernier id inséré ...

Discussions similaires

  1. Oracle - séquence : récupérer l'id après insert
    Par apo.arutha dans le forum Développement de jobs
    Réponses: 14
    Dernier message: 24/02/2017, 10h10
  2. Réponses: 3
    Dernier message: 15/12/2011, 02h36
  3. Comment récupérer l'ID après insertion ?
    Par Chabanus dans le forum Glassfish et Payara
    Réponses: 2
    Dernier message: 21/06/2010, 11h17
  4. [VB.NET] [ADO.NET] Récupérer id après insertion
    Par nashouille dans le forum Accès aux données
    Réponses: 9
    Dernier message: 09/01/2005, 15h54
  5. récupérer valeur d'un ID après insertion
    Par rikidi dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/08/2003, 22h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo