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

ASP.NET Discussion :

Récupération clé primaire après insertion par un DetailsView


Sujet :

ASP.NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2004
    Messages : 33
    Par défaut Récupération clé primaire après insertion par un DetailsView
    Bonjour,
    Je suis un débutant en asp.net, et en c# aussi, et je cherche depuis maintenant bien trop longtemps pour mes nerfs comment récupérer l'id du dernier enregistrement effectué dans une table par un DetailsView et un SqlDataSource.
    Il faut noter que, l'id mis de côté, tout fonctionne parfaitement pour éditer, ajouter et supprimer des entrées dans la table. J'ai donc modifié l'InsertCommand de mon SqlDataSource pour ressembler à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    InsertCommand=" ma commande d'insertion qui fonctionne;SELECT @NewID = SCOPE_IDENTITY()"
    et dans les InsertParameters :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:Parameter Name="NewID" Type="Int32" Direction="Output" />
    Puis j'essaie de récupérer cette valeur dans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    protected void DetailsView1_ItemInserted(object sender, DetailsViewInsertedEventArgs e)
        {
            int id;
            id = (int)e.Values["NewID"];
            TextBox1.Text = id.ToString();
         }
    Mais rien à faire, j'obtiens toujours un "System.NullReferenceException: La référence d'objet n'est pas définie à une instance d'un objet." sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    id = (int)e.Values["NewID"];
    Une bonne âme pour m'aider ?

  2. #2
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 23
    Par défaut
    Salut,

    Pour récupérer l'id du dernier élément entré dans une base de donnée, tu peux utiliser cette ligne-ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SqlCommand Command = new SqlCommand("SELECT @@IDENTITY as ID", oConn);
    cependant tu dois être vigilant et il est préférable de mettre cette requête dans une procédure qui verrouille la table car si un autre utilisateur fait une nouvelle entrée entre l'insertion et la SQLCommand, tu risques de ne pas récupérer le bon ID!!

    si cela ne marche pas ( ce qui m'étonnerait) essaye d'effectuer l'opération sur l'event "inserting" et non "Inserted" mais normalement tu devrais trouver ton bonheur!!

    Cordialement

    Patrice

  3. #3
    Membre Expert
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Par défaut
    Salut,

    t'as peut-être oublié le @ dans e.Values["NewId']

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2004
    Messages : 33
    Par défaut
    Merci pour vos réponses !
    J'ai en fait pu résoudre mon problème d'une manière assez proche de celle que patrice419 me suggère. Je fais dans la méthode ItemInserted du DetailsView une requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ident_current('MaTable') AS NewID
    J'avais essayé avec @@IDENTITY mais ça ne semblait pas fonctionner. En fait si j'exécutais les deux requêtes "d'une traite", séparées par un point-virgule, @@IDENTITY me retournait bien la valeur mais si je les faisais une après l'autre je n'avais que null en retour.

    Par contre aucun risque d'accès concurrent, cette partie du code est pour la partie d'administration et encore uniquement celle de configuration de l'application.

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/12/2011, 02h36
  2. [MySQL] Récupération de donnée après INSERT
    Par benjamin002 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 24/11/2010, 14h21
  3. Récupérer une clé primaire après insertion
    Par Cyrano dans le forum SQL
    Réponses: 6
    Dernier message: 16/02/2009, 15h55
  4. [SQL-Server] Récupération la clé primaire après une insertion
    Par crazyday dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 27/09/2007, 02h25
  5. Récupération la clé primaire après une insertion
    Par crazyday dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 17/09/2007, 15h51

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