none
Contenu du datarow après TableAdapter.Insert. RRS feed

  • Question

  • Bonjour à toutes, tous.

    J'ai une question de débutant en ADO.NEt et VB.NET

    Je travaille à la mise à jour d'une base SQL Server depuis le code.

    En furetant sur l'aide Microsoft j'ai déduit qu'il fallait utiliser la logique ci-dessous:

    1- Instancier le dataset

    2- Instancier les tableAdapters et les remplir.

    3- Créer des dataRow pour parcourir les enregistrements.

    1ère question: Est-ce bien la bonne logique?

    Mon souci:

    Je veux tout simplement créer un enregistrement dans une table puis ensuite, me repositionner dessus pour le modifier.

    J'arrive bien à créer un nouvel enregistrement avec un TableAdapter.insert en récupérant dans une variable le N° d'identité venu du serveur  mais je ne sais comment me positionner sur cet enregistrement dans le dataRow qui semble ne pas le connaitre alors qu'il figure bien dans le TableAdapter avec la bonne identité.

    J'espère que la solution n'est pas de recharger le tableAdapter après chaque Insert, mais pour l'instant je n'ai pas trouvé mieux!

    Merci de votre aide

    Gilles

    vendredi 27 décembre 2013 18:11

Réponses

  • Bonjour

    Si j'ai bien compris, vous ajoutez un élément dans la BD et après vous voulez le chercher et le modifier.
    L'approche plus directe c'est d’ajouter la ligne dans le datasse directement avec les valeurs voulues (dans un DataGridView ou dans des controles TextBox), et seulement après l'enregistrer.

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    • Marqué comme réponse mahastian lundi 6 janvier 2014 18:54
    lundi 6 janvier 2014 12:57

Toutes les réponses

  • Bonjour,

    1- Instancier le dataset.
    Oui

    2- Instancier les tableAdapters et les remplir.
    (Un TableAdapter ne se rempli pas... Ce sont les TableAdapter qui remplissent les DataSet)

    3- Créer des dataRow pour parcourir les enregistrements ?
    Ca veut dire quoi ?

    Si vous appelez la méthode Insert() une commande INSERT est envoyé à la base de données. Vous n'aurez donc rien au niveau de votre DataSet. Vous serez donc obligez de faire un Fill() pour charger les données depuis la base de données.

    L'autre solution est mettre votre ligne dans votre DataSet et ensuite d'appeler la méthode Update() du TableAdapter et passer en paramètre ce DataSet. Le TableAdapter se chargera de faire un INSERT et de récupérer automatiquement l'identifiant crée si il est de type IDENTITY et mettre à jour votre DataSet.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    dimanche 29 décembre 2013 16:25
    Modérateur
  • Merci Gilles de vous intéresser à mon cas.

    Pour être plus clair, voici en résumé ce que je fais:

    '-------------------------------------

        Sub Test(ByVal Header As Integer)
            ' instancie le dataset
            Dim ds As New dsGed
            '--------------------------------------
            ' instancie l'adapter
            Dim tRecordAdapt As New dsGedTableAdapters.tuHeaderRecordTableAdapter
            '------------------------------------
            ' remplit l'adapter ( le dataset!)
            tRecordAdapt.Fill(ds.tuHeaderRecord)
            '-------------------------------------
            ' initialise le TableRow
            Dim RecordRow() As Data.DataRow
            '----------------------------------------
            ' initialise les variables
            Dim strCritere = "Archive = 0"
            Dim SetOrder As String = "MonChampTri, TownId DESC"
            Dim NewHeader As Integer
            '---------------------------
            ' remplit le recordRow
            RecordRow = ds.tuHeaderRecord.Select(CStr(strCritere), SetOrder)

            NewHeader = Convert.ToInt32(tRecordAdapt.InsertQuery(ValeurCol1, ValeurCol2))

        End Sub

    '----------------------------------------------------

    A ce stade je récupère bien la valeur de clé dans NewHeader et ma datatable tuHeaderRecord est correctement renseignée avec la clé créée.

    Je voudrais maintenant récupérer la ligne dans mon RecordRow pour la modifier mais elle n'y est pas connue. Dit autrement il me faudrait une sorte de recordRow.refresh ou bien si  l'utilisation du recordRow n'est pas correcte, un exemple de code pour récupérer ma ligne nouvelle à modifier serait bienvenu.

    Merci encore

    Gilles

    dimanche 29 décembre 2013 17:06
  • Bonjour

    Si j'ai bien compris, vous ajoutez un élément dans la BD et après vous voulez le chercher et le modifier.
    L'approche plus directe c'est d’ajouter la ligne dans le datasse directement avec les valeurs voulues (dans un DataGridView ou dans des controles TextBox), et seulement après l'enregistrer.

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    • Marqué comme réponse mahastian lundi 6 janvier 2014 18:54
    lundi 6 janvier 2014 12:57
  • Merci Aurel

    Ca fonctionne!

    Cordialement

    Gilles

    lundi 6 janvier 2014 18:54