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 :

DataSet et DataTable


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 7
    Par défaut DataSet et DataTable
    Bonjour à tous,

    Je vous expose mon problème. Je souhaite récupérer le contenu d'une table de ma BDD (SQL Server) et la mettre dans une DataTable en passant par un DataSet. Jusque là, pas de soucis.

    Ensuite, j"envoie cette datatable sur une autre partie de mon application afin de la manipuler (ajout de lignes), ... Jusque là, j'y arrive encore.

    Mais aprés, j'aimerais savoir si c'est possible de renvoyer cette DataTable à la BDD afin de mettre à jour la bonne table correspondante avec les changements effectuer pour assurer la persistance des données. Si oui, quelle est la démarche à entreprendre ?

    Merci d'avance pour votre aide.

  2. #2
    Membre éprouvé

    Homme Profil pro
    kiné passionné de dev
    Inscrit en
    Mars 2006
    Messages
    1 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : kiné passionné de dev

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 570
    Billets dans le blog
    1
    Par défaut
    Tiens regarde ici:http://plasserre.developpez.com/v6-5.htm,
    vas à "ajouter un enregistrement"

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 7
    Par défaut
    Oui mais l'exemple donné sur ce site (trés bon au passage) est réalisé sur un seul formulaire. Mon idée, c'était de recup les données dans une DataTable, et ensuite d'envoyer cette DataTable seule ailleurs. Par conséquent, elle n'est plus liée à un DataSet et à la BDD donc, non ?

  4. #4
    Membre éprouvé

    Homme Profil pro
    kiné passionné de dev
    Inscrit en
    Mars 2006
    Messages
    1 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : kiné passionné de dev

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 570
    Billets dans le blog
    1
    Par défaut
    Envoi le code que tu utilise pour "envoyer" ta datatable, et celui que tu utilise pour charger ton dataset stp

  5. #5
    Steven62
    Invité(e)
    Par défaut
    Donc en fait, j'ai ma FormMain avec toute la partie graphique et une DAL pour regrouper tout ce qui est accés aux données, y'a aussi une couche métier pour les objets.

    Dans ma FormMain, je fais appel à une fonction présente dans ma DAL qui se charge de récupérer une DataTable et la renvoie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function GetArretSrv() As System.Data.DataTable
                Return Me.SqlHelper.GetDataTable(Data.CommandType.StoredProcedure, "ArretSrv_SELECT")
    End Function
    Cette fonction fait appel à ma classe SQLHelper dans laquelle on trouve différente fonction et procédure : GetDataTable, GetDataSet, ExecuteNonQuery, ExecuteScalar, ...

    Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Function GetDataTable(ByVal CommandType As System.Data.CommandType, ByVal CommandText As String, ByVal ParamArray CommandParameters() As System.Data.SqlClient.SqlParameter) As System.Data.DataTable
     
                'Récupération des résultats
                Dim dsResults As System.Data.DataSet = Me.GetDataSet(CommandType, CommandText, CommandParameters)
                'Vérification du DataSet et des DataTable
                If Not dsResults Is Nothing AndAlso dsResults.Tables.Count > 0 Then
                    Return dsResults.Tables(0)
                Else
                    Return Nothing
                End If
     
    End Function
    Donc je me retrouve avec ma DataTable sur ma FormMain.

    Ce que j'aimerais faire, c'est ajouter des lignes dans cette DataTable à partir de ma FormMain et ensuite de la renvoyer à ma DAL en utilisant une nouvelle sub. Cette procédure serait charger de mettre à jour la BDD SQL Server. J'espère avoir été assez clair

    Ps : Tsoupi c'est moi (enfin, le compte de ma cop).
    Dernière modification par Poulain ; 07/04/2008 à 10h02. Motif: [ajout balise code]

  6. #6
    Steven62
    Invité(e)
    Par défaut
    Personne pour m'aider ?

    Pour l'instant, je fais comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim objArretSrvDataHelper As New ReseauLibrary.DAL.ArretSrvDataHelper
    objArretSrvDataHelper.InsertArretSrv(champ1, champ2, etc...)
    Je met ça dans une boucle. Ca créé donc une connexion / déconnexion à chaque ajout dans la table ArretSrv. Pas tip top. Pour ça que je veux faire une boucle qui ajoute des lignes à ma DataTable (récupérée comme expliqué plus haut) et que seulement à la fin, j'envoie cette DataTable pour sauvegarder les données.

  7. #7
    Membre éprouvé

    Homme Profil pro
    kiné passionné de dev
    Inscrit en
    Mars 2006
    Messages
    1 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : kiné passionné de dev

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 570
    Billets dans le blog
    1
    Par défaut
    Je pense que c'est faisable, mais trop compliqué pour moi, je passe la main...

  8. #8
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 184
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 184
    Par défaut
    Bonjour.

    Attention, c'est une question c.. :
    pourquoi n'envoies tu pas un dataadapter au lieu d'une datatable ?

    Peu importe que la connexion soit fermée, tu conserveras quand même les commands et les indicateurs de maj ou d'insertion de lignes.

    Cdt.

  9. #9
    Steven62
    Invité(e)
    Par défaut
    Citation Envoyé par olsimare Voir le message
    Bonjour.

    Attention, c'est une question c.. :
    pourquoi n'envoies tu pas un dataadapter au lieu d'une datatable ?

    Peu importe que la connexion soit fermée, tu conserveras quand même les commands et les indicateurs de maj ou d'insertion de lignes.

    Cdt.
    Pas bête

    Je vais essayer et je vous tiens au courant.

  10. #10
    Steven62
    Invité(e)
    Par défaut
    Citation Envoyé par olsimare Voir le message
    Bonjour.

    Attention, c'est une question c.. :
    pourquoi n'envoies tu pas un dataadapter au lieu d'une datatable ?

    Peu importe que la connexion soit fermée, tu conserveras quand même les commands et les indicateurs de maj ou d'insertion de lignes.

    Cdt.
    Je up le sujet car je viens de tester ta solution (j'étais sur autre chose en attendant).

    J'ai donc fais comme tu m'as dis : je recup le DataAdapter et je fais mes MAJ dessus. Pourtant, ma BDD ne se met par à jour et je n'ai aucun message d'erreur.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Dim dsChangement As New DataSet
    Dim dtChangement As DataTable
    Dim daChangement As System.Data.SqlClient.SqlDataAdapter
    daChangement = Me.SqlHelper.GetDataAdapter(CommandType.StoredProcedure, "ChangementOrdreAffichage")
     
    daChangement.Fill(dsChangement)
    dtChangement = dsChangement.Tables(0)
     
    Dim dr1 As DataRow
    Dim ok As Boolean = True
    Dim i As Integer = 0
     
    ' cette partie n'est pas importante, c'est là ou je fais mes modifs
    For Each dr1 In dtChangement.Rows
        If i >= Nouvelle - 1 And i < Ancienne - 1 Then
              dr1("Ordre_App") = i + 2
        End If
        If i = Ancienne - 1 Then
              dr1("Ordre_App") = Nouvelle
        End If
        i = i + 1
    Next
     
    'et enfin je fais la MAJ
    dsChangement.AcceptChanges()
    daChangement.Update(dsChangement)
    Une idée de la cause de mon problème ?

    EDIT : J'ai ajouté le nom de la Table dans "daChangement.Update"
    Ca donne : daChangement.Update(dsChangement, "App")

    Maintenant, j'ai un message d'erreur à cette ligne à l'éxecution :

    Impossible pour Update de trouver TableMapping['App'] ou DataTable 'App'.
    Dernière modification par Steven62 ; 16/04/2008 à 14h12.

  11. #11
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Je vais p-e dire une grosse connerie car j'avoue que je maitrise mal le sujet (mais une formation devrait bientot corriger cela ) mais pour ma part, dans mon module d'accès aux données, quand je veux mettre ma DB à jour, je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    da.Update(ds.tables(0))
    où da est un DataAdapter et ds un DataSet.

    Je précise donc la table du dataset.
    Je n'utilise pas non plus la procédure AcceptChanges.

    En ce qui me concerne, ça fonctionne très bien.

    Essaie p-e en mentionnant la table de l'index 0 dans ton update puisque tu ne fais quand même des modifications que dans celle-là.

    Griftou.

  12. #12
    Steven62
    Invité(e)
    Par défaut
    Ca rejoint ce que j'ai fais dans mon Edit.

    Mon code donne ça maintenant : (j'ai plus de message d'erreur mais tjs pas de modif dans la BDD)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     Dim dsChangement As New DataSet
                Dim dtChangement As DataTable
                Dim daChangement As System.Data.SqlClient.SqlDataAdapter
                daChangement = Me.SqlHelper.GetDataAdapter(CommandType.StoredProcedure, "ChangementOrdreAffichage")
                daChangement.Fill(dsChangement, "Appareillage")
                dtChangement = dsChangement.Tables("Appareillage")
                Dim dr1 As DataRow
                Dim ok As Boolean = True
                Dim i As Integer = 0
                For Each dr1 In dtChangement.Rows
                    If i >= Nouvelle - 1 And i < Ancienne - 1 Then
                        dr1("Ordre_App") = i + 2
                    End If
                    If i = Ancienne - 1 Then
                        dr1("Ordre_App") = Nouvelle
                    End If
                    i = i + 1
                Next
     
                dsChangement.AcceptChanges()
                daChangement.Update(dsChangement, "Appareillage")

  13. #13
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    J'ai aussi beaucoup chipoté avec ce truc là. Sérieusement, plutot que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    daChangement.Update(dsChangement, "Appareillage")
    essaie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    daChangement.Update(dsChangement.Tables(0))
    Même si c'est juste pour me faire plaisir, essaie et dis moi quoi.

    Griftou.

  14. #14
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 184
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 184
    Par défaut
    Bonjour.

    Je ne vois pas de CommandBuilder dans ton code.

    Un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim cmdBuilder As New SqlCommandBuilder(daChangement)
    avant l'update vaut le coup d'être testé.

    Cdt.

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/04/2009, 12h25
  2. DataSet et Datatable
    Par Redg9 dans le forum Windows Forms
    Réponses: 17
    Dernier message: 17/03/2009, 14h52
  3. Réponses: 2
    Dernier message: 22/05/2008, 12h37
  4. Gestion Dataset et Datatable
    Par Niquel dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 24/07/2007, 14h13
  5. [ADO.NET] Dataset et DataTable
    Par gibea00 dans le forum Accès aux données
    Réponses: 4
    Dernier message: 15/12/2006, 04h49

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