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

VB.NET Discussion :

[ADO.NET] Lecture d'une clé primaire


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 18
    Par défaut [ADO.NET] Lecture d'une clé primaire (base sql) avec SCOPE IDENTITY
    Je suis confronté à une petite difficulté.

    Je développe une petite application de gestion de dossiers utilisant un treeview ; lorsque l'utilisateur veut ajouter un dossier, je crée une nouvelle ligne dans la base de données et un nouveau noeud dans le treeview.

    Je souhaiterais affecter la valeur de la clé primaire (auto-incrémentée) de la nouvelle ligne à la propriété Tag de mon noeud.

    Or, au moment où je crée la ligne dans la base de donnée, il m'est impossible de lire cette valeur (j'ai toujours "-1" en retour).

    Idéalement, j'aimerais pouvoir lire cette valeur avant l'update (j'imagine que le moteur de base de données à déjà dû la définir à ce moment) mais après ça va aussi, si je suis sûr qu'il s'agit bien de la clé primaire de ma nouvelle ligne.

    Voici le code qui crée la ligne (rien d'extraordinaire) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ObjetDataRow = frmMain.DossiersDataSet.Tables("Dossiers").NewRow()
     
    ObjetDataRow("Dossier") = "Nouveau dossier..."
     
    frmMain.DossiersDataSet.Tables("Dossiers").Rows.Add(ObjetDataRow)
     
    frmMain.DossiersTableAdapter.Update(frmMain.DossiersDataSet.Dossiers)
    Quelle instruction dois-je utiliser et à quel moment pour avoir la valeur de la clé primaire qui figurera en définitif dans la table ?

    Ou pour résumer, comment retrouver avec certitude ma ligne dans la base de données (dans la cas où d'autres auraient été créées par un autre utilisateur entre temps) ??

    D'avance merci

  2. #2
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    Tu vas devoir modifier l'InsertCommand de ton DataAdapter.
    Et me semble-t'il pour certain(s) SGBD gérer un event.

    La modification de l'InsertCommand va dépendre du SGBD utilisé.
    Quel est-il?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 18
    Par défaut
    Bonsoir,

    J'utilise pour l'instant une base de données SQL server CE 3.5, proposée par défaut par VB.net.

    Mais je n'ai rien contre une base Access si ça peut faciliter les choses !

  4. #4
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Désolé pour SQL server : je ne pratique pas.

    Pour MsAccess,c'est assez simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    string MonChampAutoIncrement = "ID" ; 
    MyAdapter.InsertCommand += " " + MonChampAutoIncrement + " = SCOPEIDENTITY()" ;
    MyAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
    Ca aurait été un peu plus compliqué en MySQL et Oracle.

    PS: c'est sans rapport avec la question, mais n'oublie pas de faire frmMain.DossiersDataSet.Tables("Dossiers").AcceptChanges() après l'Adapter.Update().

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 18
    Par défaut
    Merci pour la réponse !

    Je digère tout ça, fais les modifs nécessaires et je reviens

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    948
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 948
    Par défaut
    je confirme qu'il s'agit de rajouter la commande SCOPE IDENTITY dans la requete SQL, et SCOPE IDENTITY est disponible sur SQL server (qui est mieux qu'access en tant que base de données, si tu as commencé sur SQL server ce serait domamge de repasser en access).

    la définition sur MSDN :
    http://msdn.microsoft.com/en-us/library/ms190315.aspx

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB.NET] ADO.NET: update d'une dataset dans une base
    Par Alexj51 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 11/05/2006, 16h48
  2. [ADO.NET]Comment réaliser une relation sur plusieurs champs?
    Par kleomas dans le forum Accès aux données
    Réponses: 3
    Dernier message: 13/03/2006, 13h40
  3. [ADO.Net] Comment réaliser une jointure bindée ?
    Par prophetky dans le forum Accès aux données
    Réponses: 4
    Dernier message: 18/02/2006, 17h17
  4. [ADO.NET] Comment rendre une certaine colonne "AutoIncrement" ?
    Par maitrebn dans le forum Accès aux données
    Réponses: 3
    Dernier message: 23/03/2005, 23h12
  5. [C#] [.NET] Lecture d'une classe dans un fichier
    Par niPrM dans le forum Windows Forms
    Réponses: 4
    Dernier message: 18/05/2004, 09h57

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