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

C# Discussion :

Mettre à jour ( via SQL ) une base de données [Débutant]


Sujet :

C#

  1. #1
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 102
    Points : 66
    Points
    66
    Par défaut Mettre à jour ( via SQL ) une base de données
    Bonjour,

    Je suis confronté à un petit soucis : je dois mettre à jour une base de données ( AS400 ) via SQL.

    Jusqu'à présent je ne faisais que lire et afficher des données et je m'en sortais très bien via la classe OleDbConnection ( en passant par la création d'un "adaptateur/dataset" ).

    Dois-je dans mon cas de figure :
    1/ Créer la table à mettre à jour dans mon DataSet ( jusque là classique )

    2/ Mettre à jour les données directement dans la table crée dans le DataSet

    3/ et là... je bloque !


    Un bout de code, une idée pour me mettre sur la (bonne) voie...



    JC

  2. #2
    Membre actif
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2016
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2016
    Messages : 154
    Points : 268
    Points
    268
    Par défaut
    Bonjour mon cher,
    je te conseillerai dans la continuité de code apres le remplissage de ton Dataset d'ecrire le code de modification des données et d'utiliser la commande de Oledbcommandbuilder cad :
    [CODE]

    adapter.UpdateCommand = builder.GetUpdateCommand();
    adapter.Update(dataSet);

    [CODE]

    Courage

  3. #3
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    Bonjour Prisson

    Merci d'avoir pris le temps de répondre à ma question.


    Dans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     adapter.UpdateCommand = builder.GetUpdateCommand();
                     adapter.Update(dataSet);

    Comment dois-je définir/créer la classe (?) "builder" ?

  4. #4
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    Re-Bonjour,

    Merci pour ton aide Prisson,

    J'ai trouvé la réponse à ma question :


    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
    // [  Création adaptateur  ]
                        OleDbDataAdapter MyAdapt = new OleDbDataAdapter();
     
                        // [ Création DataSet ]
                        DataSet myDataSet = new DataSet();
     
                        // [ Création Objet "MyUpdate" OleDbCommandBuilder ]
                        OleDbCommandBuilder MyUpdate = new OleDbCommandBuilder();
     
                        // [ Création requête d'accés à lenregistrement ]
                        string RQTE_ACCES_INTERLO = " select * from ADMGFC_DBF.EINTRLP where FCHROI = " + STR_INTERLO_MAJ[0].NUM_CHRO_MAJ;
     
                        // Exécution de la requête construite ci dessus via l'adapteur et injection dans le DataSet
                        // [ Un ADAPTATEUR sert à REMPLIR un DATASET ]
                        // ( L'adapteur lance et exécute la requête en ouvrant la connexion ) 
                        MyAdapt.SelectCommand = new OleDbCommand(RQTE_ACCES_INTERLO, ConnectLst);


    Pour ceux que ça intéresse, voici un site intéressant à ce sujet :


    http://csharp.net-informations.com/d...lder-oledb.htm

  5. #5
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    pour tes requêtes tu devrais utiliser les Parameters, les concaténations laissent de la place à l'injection.

    Pour ton sujet initial, si tu cherches à faire un UPDATE (mais pas sûr d'avoir compris), je vois pas pourquoi tu veux passer par un DataSet.
    Un simple ExecuteNonQuery de ta requête d'update semble bien plus simple et performant.
    Plus je connais de langages, plus j'aime le C.

  6. #6
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    Bonjour jopopmk,

    Merci pour ton aide


    Je ne connais pas "ExecuteNonQuery", merci de m'avoir orienté la dessus ! Oui, effectivement, c'est bien un Update que je souhaite effectuer.


    Par contre, dans ta phrase "pour tes requêtes tu devrais utiliser les Parameters, les concaténations laissent de la place à l'injection.", je ne saisis pas ce que tu veux dire..

    je ne sais pas ce qu'une une "injection" ( suis débutant en C#).

    Qu'entends tu par "Parameters" : veux tu dire "Parametres" ??

    Merci

    JC

  7. #7
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Lorsque tu génères une requête il y a très souvent une partie variable (dans ton cas c'est STR_INTERLO_MAJ[0].NUM_CHRO_MAJ). En faisant une simple concaténation à la partie constante de ta requête tu as la possibilité que la requête finale soit erronée, qu'elle génère un comportement inattendu ou pire, qu'elle dénature les données et/ou le schéma de ta base de donnée. Pour des questions de sécurités il conviendrait donc de faire un ensemble de tests de validation avant de faire ta concaténation en toute quiétude. C'est à ça que servent les Parameters : tu instancies un Parameter avec ta valeur et la commande se chargera de faire la validation avant de lancer la requête.

    Pour plus d'information sur leur utilisation voir la fiche MSDN OleDbParameter.

    Pour l'injection (SQL dans le cas qui nous intéresse), je te laisse voir la fiche Wiki de l'injection SQL. C'est très simple à comprendre.

    Venons en à l'UPDATE, voilà un petit exemple générique qui parlera mieux que des mots :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // soit cnxString une chaine de connexion valide
    using (OleDbConnection cnx = new OleDbConnection(cnxString) {
        cnx.Open();
        OleDbCommand cmd = new OleDbCommand("UPDATE table SET field = @field WHERE key = @key", cnx);
        cmd.Parameters.Add("@field", OleDbType.Varchar).Value = "nouvelle valeur";
        cmd.Parameters.Add("@key", OleDbType.Integer).Value = 123;
        int updatedRowsCount = cmd.ExecuteNonQuery();
        MessageBox.Show(updatedRowsCount.ToString() + " enregistrement(s) a(ont) été mis à jour");
    }
    N'hésite pas à parcourir les fiches MSDN des objets de l'espace de nom System.Data.OleDb pour plus d'info
    Plus je connais de langages, plus j'aime le C.

  8. #8
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    Bonjour jopopmk


    Merci pour ton aide.


    Je suis en train de potasser tout ça !





    J.C

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/10/2008, 10h53
  2. mise à jour automatisé d'une base de donnée
    Par giroparo dans le forum SQL
    Réponses: 2
    Dernier message: 29/01/2008, 17h32
  3. [Conception] mise à jour automatique d'une base de donné distante
    Par bipbip2006 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 01/06/2006, 16h45
  4. [MySQL] Mettre un booléen dans une base de donnée
    Par Viau dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 26/01/2006, 15h14
  5. Interet de mettre des fichiers dans une base de donnée
    Par Oberown dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 04/07/2005, 11h35

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