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

ADO.NET Discussion :

Mise à jour d'une table dans access avec un dataset


Sujet :

ADO.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 86
    Points : 50
    Points
    50
    Par défaut Mise à jour d'une table dans access avec un dataset
    Bonjour à tous,

    Je veux mettre à jour 2 champs CH1 et CH2 dans une table TBTEST d'une base Access 2000.

    Ci-dessous le code pour le remplissage de la table TBTEST dans une datatable d'un dataset :

    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
    Public Sub Modifier_TBTEST(ByVal CH_CONNEXION As String)
     
            ' Déclaration
     
            Dim maCommande As New OleDbCommand()
            Dim maConnection As New OleDbConnection()
            Dim monDataAdapter As New OleDbDataAdapter()
            Dim monDataSet As New DataSet()
     
            Dim DR_TB As DataRow
            Dim CH1 As Integer
            Dim RSQL As String
     
            Try
                ' Connection
     
                maConnection.ConnectionString = CH_CONNEXION
                maConnection.Open()
     
                RSQL = "SELECT TBTEST.ID, TBTEST.CH1, TBTEST.CH2 FROM TBTEST"
     
                monDataAdapter.SelectCommand = New OleDbCommand(RSQL, maConnection)
                monDataAdapter.Fill(monDataSet, "TBTEST")
    J'ai essayé avec 2 méthodes :

    Méthode 1 : Exécution de 8000 commandes de mises à jour

    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
     
                CH1 = 0
                For Each DR_TB In monDataSet.Tables("TBTEST").Rows
                    CH1 = CH1 + 1
     
                    RSQL = "UPDATE TBTEST SET TBTEST.CH1 = " & CH1
                    RSQL = RSQL & ", TBTEST.[CH2] = 'test modif CH2'"
                    RSQL = RSQL & " WHERE (TBTEST.ID LIKE '" & DR_TB("ID") & "')"
     
                    ' Commande
     
                    maCommande.Connection = maConnection
                    maCommande.CommandText = RSQL
                    maCommande.ExecuteNonQuery()
     
                Next DR_TB
    Avec la méthode 1 la mise à jour prend 7 minutes pour mettre à jour 2 champs dans une table de 8000 enregistrements !!!

    Méthode 2 : Utilisation de la fonction UpdateCommand d'un DataAdapter

    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
     
                CH1 = 0
                For Each DR_TB In monDataSet.Tables("TBTEST").Rows
                    CH1 = CH1 + 1
                    DR_TB("CH1") = CH1
                    DR_TB("CH2") = "test modif CH2"
                Next DR_TB
     
                monDataSet.Tables("TBTEST").AcceptChanges()
     
                Dim CmdBuild As OleDbCommandBuilder
                CmdBuild = New OleDb.OleDbCommandBuilder(monDataAdapter)
                CmdBuild.GetDeleteCommand()
                CmdBuild.GetInsertCommand()
                CmdBuild.GetUpdateCommand()
     
                'DELETE COMMANDE = DELETE FROM TBTEST WHERE ( (ID = ?) AND ((? = 1 AND CH1 IS NULL) OR (CH1 = ?)) AND ((? = 1 AND CH2 IS NULL) OR (CH2 = ?)) )
                'DELETE INSERT = INSERT INTO TBTEST( ID , CH1 , CH2 ) VALUES ( ? , ? , ? )
                'DELETE UPDATE = UPDATE TBTEST SET ID = ? , CH1 = ? , CH2 = ? WHERE ( (ID = ?) AND ((? = 1 AND CH1 IS NULL) OR (CH1 = ?)) AND ((? = 1 AND CH2 IS NULL) OR (CH2 = ?)) )
     
                monDataAdapter.DeleteCommand = CmdBuild.GetDeleteCommand()
                monDataAdapter.InsertCommand = CmdBuild.GetInsertCommand()
                monDataAdapter.UpdateCommand = CmdBuild.GetUpdateCommand()
     
                monDataAdapter.Update(monDataSet.Tables("TBTEST"))
    Avec cette méthode aucune mise à jour n’est effectuée et je n’ai pas de message d’erreur.

    Avez-vous des pistes ?

    Merci d'avance pour vos réponses

  2. #2
    Expert éminent 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
    Points : 7 903
    Points
    7 903
    Par défaut
    Je ne comprends pas trop ces partie de commandes : " ? = 1"
    Je m'attendais plutôt à : "? IS NULL".

    Sinon essaye d'inserér avant Next DR_TB l'instruction :
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  3. #3
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    Il faut éviter la concaténation des paramètres sous forme de chaînes de caractères dans les instructions sql. Adoptez les bonnes pratiques en utilisant les requêtes paramétrées. Entre autres, elles protègent contre les attaques de type injections sql, gèrent les formats de dates, etc.
    N'oubliez pas le tag et

Discussions similaires

  1. [Débutant] Mise à jour d'une table via formulaire avec champs liés
    Par DaCoolG dans le forum ASP.NET MVC
    Réponses: 1
    Dernier message: 28/01/2015, 15h09
  2. [Débutant] Comment afficher ligne x colonne Y d'une table dans access avec vs2012
    Par JetLibre dans le forum VB.NET
    Réponses: 2
    Dernier message: 04/08/2013, 23h23
  3. Creation d'une table dans ACCESS avec le composant TADOTABLE ?
    Par QAYS dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/10/2008, 18h39
  4. Mise à jour d'une table dans 2 BDD
    Par bozolozo dans le forum Access
    Réponses: 4
    Dernier message: 21/04/2006, 17h55
  5. Mise à jour d'une table avec un fichier csv
    Par blackangel dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 26/05/2005, 15h46

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