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 :

DEBUG - Detail des requetes dans un DataAdapter


Sujet :

Windows Forms

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Par défaut DEBUG - Detail des requetes dans un DataAdapter
    Bonjour, j'ai une erreur lorsque passe sur cette ligne de mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlDataAdapter.Update(dataSetChanged, "Clients");
    ce qui est etonnant c'est que si je fais la meme chose avec ACCESS, ca passe comme une lettre a la poste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OleDbDataAdapter dataAdapter ; dataAdapter.Update(dataSetChanged, "Clients");
    Le message d'erreur est le suivant:
    The variable name '@NumFacture' (qui est ma clef primaire) has already been declared. Variable names must be unique within a query batch or stored procedure.
    N'y a t'il pas un moyen lorsque on est mode debug et que je pose un point d'arret d'avoir la requete exacte (la valeur des champs et non @MonChamps) si je regarde le detail de mon dataAdapter?
    Merci de votre aide (precieuse !)

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Avec OleDb, les noms de paramètre ne sont pas pris en compte. Donc si tu as 2 fois le même paramètre dans une requête, du point de vue du provider c'est 2 paramètres différents, donc il faut l'ajouter 2 fois à la collection Parameters.

    Alors qu'avec Sql Server, les noms de paramètres sont uniques : si tu as 2 fois le même paramètre, tu ne l'ajoutes qu'une fois.

    Je pense que l'erreur est à ce niveau là...

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Par défaut
    oui je viens de voir que mon champs ete en double!
    Par contre n'y a t'il pas moyen de voir la requete envoyé?
    l'idée et de pouvoir l'executer directement dans SQL Server
    Je me retrouve avec une nouvelle erreur du type :

    Error converting data type varchar to numeric.
    et je ne vois pas d'ou cela vient..... :
    merci de ton aide

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par skunkies Voir le message
    Par contre n'y a t'il pas moyen de voir la requete envoyé?
    Les propriétés UpdateCommand/InsertCommand/DeleteCommand
    Par contre si tu utilises un CommandBuilder, ces propriétés sont nulles. Pour récupérer la commande, il faut gérer l'évènement RowUpdated du DataAdapter ; la commande est dans les paramètres de l'évènement

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Par défaut
    Que veux tu dire par :
    Pour récupérer la commande, il faut gérer l'évènement RowUpdated du DataAdapter ; la commande est dans les paramètres de l'évènement
    lorsque je met un point d'arret sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlDataAdapter.Update(dataSetChanged, "Clients");
    et que j'expand les propriétes de "sqlDataAdapter" je vois bien
    InsertCommand
    DeletCommand
    SelectCommand
    mais je vois la requête tel que l'ai écrite dans la fonction InitializeCommands().
    Ce que j'aimerais c'est de voir cette meme requete mais avec les vrais valeurs.
    Ex dans InitializeCommands() j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      // Reuse the SelectCommand's Connection.
                    SqlConnection sqlconnection = (SqlConnection)sqlDataAdapter.SelectCommand.Connection;
     
                    // Create an explicit, reusable insert command
                    sqlDataAdapter.InsertCommand = sqlconnection.CreateCommand();
                    sqlDataAdapter.InsertCommand.CommandText = "Insert into tblClients " +
                        "(Raison_Social, Nom_Signataire, Adresse, CP,Ville, Tel, Fax, Mail, Departement , Commentaires,Date) " +
                        "values" +
                        "( @Raison_Social, @Nom_Signataire, @Adresse, @CP,@Ville, @Tel, @Fax, @Mail, @Departement, @Commentaires, @Date)";
     
                    AddParmsSQL(sqlDataAdapter.InsertCommand, "Raison_Social", "Nom_Signataire", "Adresse", "CP", "Ville", "Tel", "Fax", "Mail", "Departement", "Commentaires", "Date");
    ce que j'aimerai c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Insert into tblClients (Raison_Social, Nom_Signataire, Adresse, CP,Ville, Tel, Fax, Mail, Departement , Commentaires,Date) values( "AAA", "BBB", "AAA", "43 543","PARIS", "01 23 34 23 34", "01 23 34 23 34", "aa@zzz.de", "43", "Commentaires", "07/01/2009")
    Suis je clair ou pas

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par skunkies Voir le message
    ce que j'aimerai c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Insert into tblClients (Raison_Social, Nom_Signataire, Adresse, CP,Ville, Tel, Fax, Mail, Departement , Commentaires,Date) values( "AAA", "BBB", "AAA", "43 543","PARIS", "01 23 34 23 34", "01 23 34 23 34", "aa@zzz.de", "43", "Commentaires", "07/01/2009")
    Tu verras jamais ça, parce que la requête n'existe jamais sous cette forme. La requête et les paramètres sont transmis séparément au SGBD

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Par défaut
    et est ce qu'il y a un moyen de voir ce qui est envoyé au sgbd?

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Oui, avec l'évènement RowUpdated, tu peux récupérer les valeurs des paramètres de la commande
    Le plus simple à mon avis est de mettre un breakpoint dans le handler de l'évènement, et d'examiner la commande avec le debugger

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 217
    Par défaut
    Si vous avez la possibilité (i.e, pour le SGBD que vous attaquez), vous pourriez aussi considérer d'utiliser un profileur SQL, qui, entre autres fonctions, vous permettra d'obtenir ce genre d'information entre votre application et le SGBD, sans être intrusif dans votre code ; voir ce fil, p.ex :

    http://www.developpez.net/forums/d66...d/#post3895292

    'HTH

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Par défaut
    Merci pour ces liens lysiandad.
    Cependant, j'ai telechargé la derniere version (SqlExpressProfiler-0.1.468.59.zip) mais lorsque je vais sur le tuto que je suis je ne retrouve pas le meme ecran de creation de template. je n'ai pas cette possibilite dans le menu.
    As tu deja utilisé ce profiler?
    Merci

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Par défaut
    j'ai donc configuré mon profiler, mais etonnament j'ai une difference entre ce que je vois lorsque je debug dans VS et la requete que SQL Server recoit.
    Je m'explique, lorsque je visualise le contenu de ma dataRow j'ai des montants qui sont bien sous cette forme : "123.12" (avec un point) en revanche, lorsque je regarde dans mon profiler j'ai le même champs qui lui est sous cette forme "123,12". C'est ce qui provoque une erreur lors de l'execution.
    Je precise que lorsque je saisi le montant dans ma textbox le montant est bien sous la forme "123,12" (avec une virgule) et lorsque je demande l'insertion je fais une conversion de la sorte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    string montant = tBoxMontantHT.Text;
                        float fMontant = float.Parse(montant);
                        newRow["MontantHT"] = fMontant;
    Est ce que vous avez une idée, une piste de cette incoherence ?
    Merci

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    quel est le type de la colonne MontantHT dans ton dataset ?

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Par défaut
    quel est le type de la colonne MontantHT dans ton dataset ?
    Comment je trouve ca?
    Ou dois je regarder pour voir le type de ma(mes) colonnes dans mon dataset?

  14. #14
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par skunkies Voir le message
    Comment je trouve ca?
    Ou dois je regarder pour voir le type de ma(mes) colonnes dans mon dataset?
    Ca dépend... c'est un DataSet que tu as créé avec le designer, ou à la main ?
    Tu peux voir le type dans les propriétés de la colonne dans le designer. Sinon, regarde la propriété newRow.Table.Columns["MontantHT"].DataType

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Ca dépend... c'est un DataSet que tu as créé avec le designer, ou à la main ?
    Je le crée a la main.

    Citation Envoyé par tomlev Voir le message
    Tu peux voir le type dans les propriétés de la colonne dans le designer. Sinon, regarde la propriété newRow.Table.Columns["MontantHT"].DataType
    je n'ai rien sous le chemin que tu m'indiques mais dans celui ci :
    newRow.ItemArrays[index]
    et c'est de type decimal
    Une cp d'ecran et ce sera plus clair.

  16. #16
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Euh... ben là je sèche
    Normalement quand tu utilises des requêtes paramétrées, le format des données n'a pas d'importance...
    Ce qui est bizarre, en plus, c'est que dans ta table Clients je ne vois pas quel champ pourrait poser des problème de conversion de chaine en nombre. Tu n'aurais pas un champ déclaré comme numérique dans la base, et que tu manipulerais comme une chaine dans le DataSet ?

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Par défaut
    moi aussi je suis un peu perdu...
    Tu n'aurais pas un champ déclaré comme numérique dans la base, et que tu manipulerais comme une chaine dans le DataSet ?
    Que veut tu dires par numerique?
    Int?

  18. #18
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Par défaut
    je suis PERDU
    je fais le teste de prendre la requete envoyé a SQL Server par mon application via le profiler et je modifie uniquement le '.' en ',' et tout marche.
    Est ce que si je fais un replace de . par , serait utile?
    Merci
    Voci la requete que je recois de mon appli:
    UPDATE tblClients
    SET Raison_Social = 'cerezrezrzeze',TotalTTC = '646,615', MontantRestePercevoir = '0',
    MontantHT = '450,54', Frais_tech = '90,108',
    TotalHT = '540,648',
    WHERE (NumFacture = '9082')
    et celle que je modifie puis execute et qui marche :
    UPDATE tblClients
    SET Raison_Social = 'cerezrezrzeze',TotalTTC = '646,615', MontantRestePercevoir = '0',
    MontantHT = '450.54', Frais_tech = '90.108',
    TotalHT = '5403.648',
    WHERE (NumFacture = '9082')

  19. #19
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Ah ben si tu mets des quotes autour des nombres, c'est normal que tu aies des problèmes de format... Les quotes, c'est pour les chaines et uniquement pour ça.

    Cette requête, c'est toi qui l'a écrite ? Si tu veux l'utiliser comme UpdateCommand d'un DataAdapter, ce n'est pas comme ça qu'il faut faire... il faut mettre dans la requête des paramètres qui correspondent aux colonnes de la DataTable

  20. #20
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Par défaut
    j'ai besoin de votre aide............
    je ne comprends pas ce qui se passe.
    j'ai moidifé dans le panneau de config Windows le separateur de decimal et de money avec un point et quand je fais mon test ca PASSE comme dans du beurre.
    Est ce que quelqu'un peut m'expliquer pourquoi.
    Je ne veux en aucun cas modifer ce parametre (manuellement) sur tous les postes qui execute l'appli.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Implementer des requetes dans des boutons
    Par rabada dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 26/05/2011, 01h10
  2. Mise à jour des requetes dans les feuilles
    Par tribaleur dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/07/2008, 08h42
  3. execution des requetes dans les mapping file hbm.xml
    Par makohsarah dans le forum Hibernate
    Réponses: 3
    Dernier message: 04/06/2008, 18h06
  4. chercher des données dans sa propre requete...
    Par shadowbob dans le forum Requêtes
    Réponses: 4
    Dernier message: 27/06/2004, 17h13
  5. Réponses: 5
    Dernier message: 08/03/2004, 10h28

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